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
249 if (!func->old_addr || klp_is_module(obj)) in klp_find_verify_func_addr()
250 ret = klp_find_object_symbol(obj->name, func->old_name, in klp_find_verify_func_addr()
283 struct klp_object *obj) in klp_write_object_relocations() argument
288 if (WARN_ON(!klp_is_object_loaded(obj))) in klp_write_object_relocations()
291 if (WARN_ON(!obj->relocs)) in klp_write_object_relocations()
294 for (reloc = obj->relocs; reloc->name; reloc++) { in klp_write_object_relocations()
295 if (!klp_is_module(obj)) { in klp_write_object_relocations()
307 ret = klp_find_object_symbol(obj->mod->name, in klp_write_object_relocations()
429 static void klp_disable_object(struct klp_object *obj) in klp_disable_object() argument
433 for (func = obj->funcs; func->old_name; func++) in klp_disable_object()
437 obj->state = KLP_DISABLED; in klp_disable_object()
440 static int klp_enable_object(struct klp_object *obj) in klp_enable_object() argument
445 if (WARN_ON(obj->state != KLP_DISABLED)) in klp_enable_object()
448 if (WARN_ON(!klp_is_object_loaded(obj))) in klp_enable_object()
451 for (func = obj->funcs; func->old_name; func++) { in klp_enable_object()
454 klp_disable_object(obj); in klp_enable_object()
458 obj->state = KLP_ENABLED; in klp_enable_object()
465 struct klp_object *obj; in __klp_disable_patch() local
474 for (obj = patch->objs; obj->funcs; obj++) { in __klp_disable_patch()
475 if (obj->state == KLP_ENABLED) in __klp_disable_patch()
476 klp_disable_object(obj); in __klp_disable_patch()
518 struct klp_object *obj; in __klp_enable_patch() local
534 for (obj = patch->objs; obj->funcs; obj++) { in __klp_enable_patch()
535 if (!klp_is_object_loaded(obj)) in __klp_enable_patch()
538 ret = klp_enable_object(obj); in __klp_enable_patch()
675 static void klp_free_funcs_limited(struct klp_object *obj, in klp_free_funcs_limited() argument
680 for (func = obj->funcs; func->old_name && func != limit; func++) in klp_free_funcs_limited()
685 static void klp_free_object_loaded(struct klp_object *obj) in klp_free_object_loaded() argument
689 obj->mod = NULL; in klp_free_object_loaded()
691 for (func = obj->funcs; func->old_name; func++) in klp_free_object_loaded()
702 struct klp_object *obj; in klp_free_objects_limited() local
704 for (obj = patch->objs; obj->funcs && obj != limit; obj++) { in klp_free_objects_limited()
705 klp_free_funcs_limited(obj, NULL); in klp_free_objects_limited()
706 kobject_put(obj->kobj); in klp_free_objects_limited()
718 static int klp_init_func(struct klp_object *obj, struct klp_func *func) in klp_init_func() argument
724 obj->kobj, "%s", func->old_name); in klp_init_func()
729 struct klp_object *obj) in klp_init_object_loaded() argument
734 if (obj->relocs) { in klp_init_object_loaded()
735 ret = klp_write_object_relocations(patch->mod, obj); in klp_init_object_loaded()
740 for (func = obj->funcs; func->old_name; func++) { in klp_init_object_loaded()
741 ret = klp_find_verify_func_addr(obj, func); in klp_init_object_loaded()
749 static int klp_init_object(struct klp_patch *patch, struct klp_object *obj) in klp_init_object() argument
755 if (!obj->funcs) in klp_init_object()
758 obj->state = KLP_DISABLED; in klp_init_object()
759 obj->mod = NULL; in klp_init_object()
761 klp_find_object_module(obj); in klp_init_object()
763 name = klp_is_module(obj) ? obj->name : "vmlinux"; in klp_init_object()
764 obj->kobj = kobject_create_and_add(name, &patch->kobj); in klp_init_object()
765 if (!obj->kobj) in klp_init_object()
768 for (func = obj->funcs; func->old_name; func++) { in klp_init_object()
769 ret = klp_init_func(obj, func); in klp_init_object()
774 if (klp_is_object_loaded(obj)) { in klp_init_object()
775 ret = klp_init_object_loaded(patch, obj); in klp_init_object()
783 klp_free_funcs_limited(obj, func); in klp_init_object()
784 kobject_put(obj->kobj); in klp_init_object()
790 struct klp_object *obj; in klp_init_patch() local
805 for (obj = patch->objs; obj->funcs; obj++) { in klp_init_patch()
806 ret = klp_init_object(patch, obj); in klp_init_patch()
818 klp_free_objects_limited(patch, obj); in klp_init_patch()
895 struct klp_object *obj) in klp_module_notify_coming() argument
898 struct module *mod = obj->mod; in klp_module_notify_coming()
901 ret = klp_init_object_loaded(patch, obj); in klp_module_notify_coming()
911 ret = klp_enable_object(obj); in klp_module_notify_coming()
921 struct klp_object *obj) in klp_module_notify_going() argument
924 struct module *mod = obj->mod; in klp_module_notify_going()
932 klp_disable_object(obj); in klp_module_notify_going()
935 klp_free_object_loaded(obj); in klp_module_notify_going()
943 struct klp_object *obj; in klp_module_notify() local
960 for (obj = patch->objs; obj->funcs; obj++) { in klp_module_notify()
961 if (!klp_is_module(obj) || strcmp(obj->name, mod->name)) in klp_module_notify()
965 obj->mod = mod; in klp_module_notify()
966 klp_module_notify_coming(patch, obj); in klp_module_notify()
968 klp_module_notify_going(patch, obj); in klp_module_notify()