klp_free_object_loaded() is supposed to clear changes made by klp_init_object_loaded(). It should call klp_clear_object_relocs() which is currently defined later.
Move the code for updating object relocations up. This is just a preparation step. No functional changes. Signed-off-by: Petr Mladek <[email protected]> --- kernel/livepatch/core.c | 72 ++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c index a3b377a3f47c..cdb25949f73b 100644 --- a/kernel/livepatch/core.c +++ b/kernel/livepatch/core.c @@ -342,6 +342,42 @@ int klp_apply_section_relocs(struct module *pmod, Elf_Shdr *sechdrs, secndx, objname, true); } +static int klp_write_object_relocs(struct klp_patch *patch, + struct klp_object *obj, + bool apply) +{ + int i, ret; + struct klp_modinfo *info = patch->mod->klp_info; + + for (i = 1; i < info->hdr.e_shnum; i++) { + Elf_Shdr *sec = info->sechdrs + i; + + if (!(sec->sh_flags & SHF_RELA_LIVEPATCH)) + continue; + + ret = klp_write_section_relocs(patch->mod, info->sechdrs, + info->secstrings, + patch->mod->core_kallsyms.strtab, + info->symndx, i, obj->name, apply); + if (ret) + return ret; + } + + return 0; +} + +static int klp_apply_object_relocs(struct klp_patch *patch, + struct klp_object *obj) +{ + return klp_write_object_relocs(patch, obj, true); +} + +static void klp_clear_object_relocs(struct klp_patch *patch, + struct klp_object *obj) +{ + klp_write_object_relocs(patch, obj, false); +} + /* * Sysfs Interface * @@ -823,42 +859,6 @@ static int klp_init_func(struct klp_object *obj, struct klp_func *func) func->old_sympos ? func->old_sympos : 1); } -static int klp_write_object_relocs(struct klp_patch *patch, - struct klp_object *obj, - bool apply) -{ - int i, ret; - struct klp_modinfo *info = patch->mod->klp_info; - - for (i = 1; i < info->hdr.e_shnum; i++) { - Elf_Shdr *sec = info->sechdrs + i; - - if (!(sec->sh_flags & SHF_RELA_LIVEPATCH)) - continue; - - ret = klp_write_section_relocs(patch->mod, info->sechdrs, - info->secstrings, - patch->mod->core_kallsyms.strtab, - info->symndx, i, obj->name, apply); - if (ret) - return ret; - } - - return 0; -} - -static int klp_apply_object_relocs(struct klp_patch *patch, - struct klp_object *obj) -{ - return klp_write_object_relocs(patch, obj, true); -} - -static void klp_clear_object_relocs(struct klp_patch *patch, - struct klp_object *obj) -{ - klp_write_object_relocs(patch, obj, false); -} - /* parts of the initialization that is done only when the object is loaded */ static int klp_init_object_loaded(struct klp_patch *patch, struct klp_object *obj) -- 2.55.0

