aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/livepatch
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/livepatch')
-rw-r--r--kernel/livepatch/core.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
index c03c04637ec6..e997782362c3 100644
--- a/kernel/livepatch/core.c
+++ b/kernel/livepatch/core.c
@@ -651,6 +651,15 @@ static struct kobj_type klp_ktype_patch = {
651 .default_attrs = klp_patch_attrs, 651 .default_attrs = klp_patch_attrs,
652}; 652};
653 653
654static void klp_kobj_release_object(struct kobject *kobj)
655{
656}
657
658static struct kobj_type klp_ktype_object = {
659 .release = klp_kobj_release_object,
660 .sysfs_ops = &kobj_sysfs_ops,
661};
662
654static void klp_kobj_release_func(struct kobject *kobj) 663static void klp_kobj_release_func(struct kobject *kobj)
655{ 664{
656} 665}
@@ -695,7 +704,7 @@ static void klp_free_objects_limited(struct klp_patch *patch,
695 704
696 for (obj = patch->objs; obj->funcs && obj != limit; obj++) { 705 for (obj = patch->objs; obj->funcs && obj != limit; obj++) {
697 klp_free_funcs_limited(obj, NULL); 706 klp_free_funcs_limited(obj, NULL);
698 kobject_put(obj->kobj); 707 kobject_put(&obj->kobj);
699 } 708 }
700} 709}
701 710
@@ -713,7 +722,7 @@ static int klp_init_func(struct klp_object *obj, struct klp_func *func)
713 func->state = KLP_DISABLED; 722 func->state = KLP_DISABLED;
714 723
715 return kobject_init_and_add(&func->kobj, &klp_ktype_func, 724 return kobject_init_and_add(&func->kobj, &klp_ktype_func,
716 obj->kobj, "%s", func->old_name); 725 &obj->kobj, "%s", func->old_name);
717} 726}
718 727
719/* parts of the initialization that is done only when the object is loaded */ 728/* parts of the initialization that is done only when the object is loaded */
@@ -753,9 +762,10 @@ static int klp_init_object(struct klp_patch *patch, struct klp_object *obj)
753 klp_find_object_module(obj); 762 klp_find_object_module(obj);
754 763
755 name = klp_is_module(obj) ? obj->name : "vmlinux"; 764 name = klp_is_module(obj) ? obj->name : "vmlinux";
756 obj->kobj = kobject_create_and_add(name, &patch->kobj); 765 ret = kobject_init_and_add(&obj->kobj, &klp_ktype_object,
757 if (!obj->kobj) 766 &patch->kobj, "%s", name);
758 return -ENOMEM; 767 if (ret)
768 return ret;
759 769
760 for (func = obj->funcs; func->old_name; func++) { 770 for (func = obj->funcs; func->old_name; func++) {
761 ret = klp_init_func(obj, func); 771 ret = klp_init_func(obj, func);
@@ -773,7 +783,7 @@ static int klp_init_object(struct klp_patch *patch, struct klp_object *obj)
773 783
774free: 784free:
775 klp_free_funcs_limited(obj, func); 785 klp_free_funcs_limited(obj, func);
776 kobject_put(obj->kobj); 786 kobject_put(&obj->kobj);
777 return ret; 787 return ret;
778} 788}
779 789