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


Reply via email to