Lines Matching refs:obj
79 static bool klp_is_module(struct klp_object *obj) in klp_is_module() argument
81 return obj->name; in klp_is_module()
84 static bool klp_is_object_loaded(struct klp_object *obj) in klp_is_object_loaded() argument
86 return !obj->name || obj->mod; in klp_is_object_loaded()
90 static void klp_find_object_module(struct klp_object *obj) in klp_find_object_module() argument
94 if (!klp_is_module(obj)) in klp_find_object_module()
103 mod = find_module(obj->name); in klp_find_object_module()
112 obj->mod = mod; in klp_find_object_module()
239 static int klp_find_verify_func_addr(struct klp_object *obj, in klp_find_verify_func_addr() argument
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()
284 struct klp_object *obj) in klp_write_object_relocations() argument
289 if (WARN_ON(!klp_is_object_loaded(obj))) in klp_write_object_relocations()
292 if (WARN_ON(!obj->relocs)) in klp_write_object_relocations()
295 for (reloc = obj->relocs; reloc->name; reloc++) { in klp_write_object_relocations()
296 if (!klp_is_module(obj)) { in klp_write_object_relocations()
314 ret = klp_find_object_symbol(obj->mod->name, in klp_write_object_relocations()
438 static void klp_disable_object(struct klp_object *obj) in klp_disable_object() argument
442 klp_for_each_func(obj, func) in klp_disable_object()
446 obj->state = KLP_DISABLED; in klp_disable_object()
449 static int klp_enable_object(struct klp_object *obj) in klp_enable_object() argument
454 if (WARN_ON(obj->state != KLP_DISABLED)) in klp_enable_object()
457 if (WARN_ON(!klp_is_object_loaded(obj))) in klp_enable_object()
460 klp_for_each_func(obj, func) { in klp_enable_object()
463 klp_disable_object(obj); in klp_enable_object()
467 obj->state = KLP_ENABLED; in klp_enable_object()
474 struct klp_object *obj; in __klp_disable_patch() local
483 klp_for_each_object(patch, obj) { in __klp_disable_patch()
484 if (obj->state == KLP_ENABLED) in __klp_disable_patch()
485 klp_disable_object(obj); in __klp_disable_patch()
527 struct klp_object *obj; in __klp_enable_patch() local
543 klp_for_each_object(patch, obj) { in __klp_enable_patch()
544 if (!klp_is_object_loaded(obj)) in __klp_enable_patch()
547 ret = klp_enable_object(obj); in __klp_enable_patch()
693 static void klp_free_funcs_limited(struct klp_object *obj, in klp_free_funcs_limited() argument
698 for (func = obj->funcs; func->old_name && func != limit; func++) in klp_free_funcs_limited()
703 static void klp_free_object_loaded(struct klp_object *obj) in klp_free_object_loaded() argument
707 obj->mod = NULL; in klp_free_object_loaded()
709 klp_for_each_func(obj, func) in klp_free_object_loaded()
720 struct klp_object *obj; in klp_free_objects_limited() local
722 for (obj = patch->objs; obj->funcs && obj != limit; obj++) { in klp_free_objects_limited()
723 klp_free_funcs_limited(obj, NULL); in klp_free_objects_limited()
724 kobject_put(&obj->kobj); in klp_free_objects_limited()
736 static int klp_init_func(struct klp_object *obj, struct klp_func *func) in klp_init_func() argument
742 &obj->kobj, "%s", func->old_name); in klp_init_func()
747 struct klp_object *obj) in klp_init_object_loaded() argument
752 if (obj->relocs) { in klp_init_object_loaded()
753 ret = klp_write_object_relocations(patch->mod, obj); in klp_init_object_loaded()
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()
767 static int klp_init_object(struct klp_patch *patch, struct klp_object *obj) in klp_init_object() argument
773 if (!obj->funcs) in klp_init_object()
776 obj->state = KLP_DISABLED; in klp_init_object()
777 obj->mod = NULL; in klp_init_object()
779 klp_find_object_module(obj); in klp_init_object()
781 name = klp_is_module(obj) ? obj->name : "vmlinux"; in klp_init_object()
782 ret = kobject_init_and_add(&obj->kobj, &klp_ktype_object, in klp_init_object()
787 klp_for_each_func(obj, func) { in klp_init_object()
788 ret = klp_init_func(obj, func); in klp_init_object()
793 if (klp_is_object_loaded(obj)) { in klp_init_object()
794 ret = klp_init_object_loaded(patch, obj); in klp_init_object()
802 klp_free_funcs_limited(obj, func); in klp_init_object()
803 kobject_put(&obj->kobj); in klp_init_object()
809 struct klp_object *obj; in klp_init_patch() local
824 klp_for_each_object(patch, obj) { in klp_init_patch()
825 ret = klp_init_object(patch, obj); in klp_init_patch()
837 klp_free_objects_limited(patch, obj); in klp_init_patch()
914 struct klp_object *obj) in klp_module_notify_coming() argument
917 struct module *mod = obj->mod; in klp_module_notify_coming()
920 ret = klp_init_object_loaded(patch, obj); in klp_module_notify_coming()
933 ret = klp_enable_object(obj); in klp_module_notify_coming()
941 struct klp_object *obj) in klp_module_notify_going() argument
944 struct module *mod = obj->mod; in klp_module_notify_going()
952 klp_disable_object(obj); in klp_module_notify_going()
955 klp_free_object_loaded(obj); in klp_module_notify_going()
964 struct klp_object *obj; in klp_module_notify() local
981 klp_for_each_object(patch, obj) { in klp_module_notify()
982 if (!klp_is_module(obj) || strcmp(obj->name, mod->name)) in klp_module_notify()
986 obj->mod = mod; in klp_module_notify()
987 ret = klp_module_notify_coming(patch, obj); in klp_module_notify()
989 obj->mod = NULL; in klp_module_notify()
994 klp_module_notify_going(patch, obj); in klp_module_notify()