diff options
Diffstat (limited to 'kernel/livepatch')
| -rw-r--r-- | kernel/livepatch/core.c | 22 |
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 | ||
| 654 | static void klp_kobj_release_object(struct kobject *kobj) | ||
| 655 | { | ||
| 656 | } | ||
| 657 | |||
| 658 | static struct kobj_type klp_ktype_object = { | ||
| 659 | .release = klp_kobj_release_object, | ||
| 660 | .sysfs_ops = &kobj_sysfs_ops, | ||
| 661 | }; | ||
| 662 | |||
| 654 | static void klp_kobj_release_func(struct kobject *kobj) | 663 | static 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 | ||
| 774 | free: | 784 | free: |
| 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 | ||
