Lines Matching refs:func
67 struct klp_func *func; in klp_find_ops() local
70 func = list_first_entry(&ops->func_stack, struct klp_func, in klp_find_ops()
72 if (func->old_addr == old_addr) in klp_find_ops()
240 struct klp_func *func) in klp_find_verify_func_addr() argument
246 if (kaslr_enabled() && func->old_addr) in klp_find_verify_func_addr()
247 func->old_addr += kaslr_offset(); in klp_find_verify_func_addr()
250 if (!func->old_addr || klp_is_module(obj)) in klp_find_verify_func_addr()
251 ret = klp_find_object_symbol(obj->name, func->old_name, in klp_find_verify_func_addr()
252 &func->old_addr); in klp_find_verify_func_addr()
254 ret = klp_verify_vmlinux_symbol(func->old_name, in klp_find_verify_func_addr()
255 func->old_addr); in klp_find_verify_func_addr()
338 struct klp_func *func; in klp_ftrace_handler() local
343 func = list_first_or_null_rcu(&ops->func_stack, struct klp_func, in klp_ftrace_handler()
345 if (WARN_ON_ONCE(!func)) in klp_ftrace_handler()
348 klp_arch_set_pc(regs, (unsigned long)func->new_func); in klp_ftrace_handler()
353 static void klp_disable_func(struct klp_func *func) in klp_disable_func() argument
357 if (WARN_ON(func->state != KLP_ENABLED)) in klp_disable_func()
359 if (WARN_ON(!func->old_addr)) in klp_disable_func()
362 ops = klp_find_ops(func->old_addr); in klp_disable_func()
368 WARN_ON(ftrace_set_filter_ip(&ops->fops, func->old_addr, 1, 0)); in klp_disable_func()
370 list_del_rcu(&func->stack_node); in klp_disable_func()
374 list_del_rcu(&func->stack_node); in klp_disable_func()
377 func->state = KLP_DISABLED; in klp_disable_func()
380 static int klp_enable_func(struct klp_func *func) in klp_enable_func() argument
385 if (WARN_ON(!func->old_addr)) in klp_enable_func()
388 if (WARN_ON(func->state != KLP_DISABLED)) in klp_enable_func()
391 ops = klp_find_ops(func->old_addr); in klp_enable_func()
397 ops->fops.func = klp_ftrace_handler; in klp_enable_func()
405 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_enable_func()
407 ret = ftrace_set_filter_ip(&ops->fops, func->old_addr, 0, 0); in klp_enable_func()
410 func->old_name, ret); in klp_enable_func()
417 func->old_name, ret); in klp_enable_func()
418 ftrace_set_filter_ip(&ops->fops, func->old_addr, 1, 0); in klp_enable_func()
424 list_add_rcu(&func->stack_node, &ops->func_stack); in klp_enable_func()
427 func->state = KLP_ENABLED; in klp_enable_func()
432 list_del_rcu(&func->stack_node); in klp_enable_func()
440 struct klp_func *func; in klp_disable_object() local
442 klp_for_each_func(obj, func) in klp_disable_object()
443 if (func->state == KLP_ENABLED) in klp_disable_object()
444 klp_disable_func(func); in klp_disable_object()
451 struct klp_func *func; in klp_enable_object() local
460 klp_for_each_func(obj, func) { in klp_enable_object()
461 ret = klp_enable_func(func); in klp_enable_object()
696 struct klp_func *func; in klp_free_funcs_limited() local
698 for (func = obj->funcs; func->old_name && func != limit; func++) in klp_free_funcs_limited()
699 kobject_put(&func->kobj); in klp_free_funcs_limited()
705 struct klp_func *func; in klp_free_object_loaded() local
709 klp_for_each_func(obj, func) in klp_free_object_loaded()
710 func->old_addr = 0; in klp_free_object_loaded()
736 static int klp_init_func(struct klp_object *obj, struct klp_func *func) in klp_init_func() argument
738 INIT_LIST_HEAD(&func->stack_node); in klp_init_func()
739 func->state = KLP_DISABLED; in klp_init_func()
741 return kobject_init_and_add(&func->kobj, &klp_ktype_func, in klp_init_func()
742 &obj->kobj, "%s", func->old_name); in klp_init_func()
749 struct klp_func *func; in klp_init_object_loaded() local
758 klp_for_each_func(obj, func) { in klp_init_object_loaded()
759 ret = klp_find_verify_func_addr(obj, func); in klp_init_object_loaded()
769 struct klp_func *func; in klp_init_object() local
787 klp_for_each_func(obj, func) { in klp_init_object()
788 ret = klp_init_func(obj, func); in klp_init_object()
802 klp_free_funcs_limited(obj, func); in klp_init_object()