On Wed, Jan 14, 2026 at 01:29:54PM +0100, Petr Pavlu wrote: > The klp_object_ext and klp_func_ext data, which are stored in the > __klp_objects and __klp_funcs sections, respectively, are not needed > after they are used to create the actual klp_object and klp_func > instances. This operation is implemented by the init function in > scripts/livepatch/init.c. > > Prefix the two sections with ".init" so they are freed after the module > is initializated. > > Signed-off-by: Petr Pavlu <[email protected]> > --- > kernel/livepatch/core.c | 3 ++- > scripts/module.lds.S | 4 ++-- > tools/objtool/check.c | 2 +- > tools/objtool/include/objtool/klp.h | 10 +++++----- > tools/objtool/klp-diff.c | 2 +- > 5 files changed, 11 insertions(+), 10 deletions(-) > > diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c > index 4e0ac47b3623..3621a7c1b737 100644 > --- a/kernel/livepatch/core.c > +++ b/kernel/livepatch/core.c > @@ -1364,7 +1364,8 @@ struct klp_object_ext > *klp_build_locate_init_objects(const struct module *mod, > for (int i = 1; i < info->hdr.e_shnum; i++) { > Elf_Shdr *shdr = &info->sechdrs[i]; > > - if (strcmp(info->secstrings + shdr->sh_name, "__klp_objects")) > + if (strcmp(info->secstrings + shdr->sh_name, > + ".init.klp_objects")) > continue; > > *nr_objs = shdr->sh_size / sizeof(struct klp_object_ext); > diff --git a/scripts/module.lds.S b/scripts/module.lds.S > index 383d19beffb4..054ef99e8288 100644 > --- a/scripts/module.lds.S > +++ b/scripts/module.lds.S > @@ -34,8 +34,8 @@ SECTIONS { > > __patchable_function_entries : { *(__patchable_function_entries) } > > - __klp_funcs 0: ALIGN(8) { KEEP(*(__klp_funcs)) } > - __klp_objects 0: ALIGN(8) { KEEP(*(__klp_objects)) } > + .init.klp_funcs 0 : ALIGN(8) { KEEP(*(.init.klp_funcs)) } > + .init.klp_objects 0 : ALIGN(8) { KEEP(*(.init.klp_objects)) } > > #ifdef CONFIG_ARCH_USES_CFI_TRAPS > __kcfi_traps : { KEEP(*(.kcfi_traps)) } > diff --git a/tools/objtool/check.c b/tools/objtool/check.c > index 3f7999317f4d..933868ee3beb 100644 > --- a/tools/objtool/check.c > +++ b/tools/objtool/check.c > @@ -4761,7 +4761,7 @@ static int validate_ibt(struct objtool_file *file) > !strcmp(sec->name, "__bug_table") || > !strcmp(sec->name, "__ex_table") || > !strcmp(sec->name, "__jump_table") || > - !strcmp(sec->name, "__klp_funcs") || > + !strcmp(sec->name, ".init.klp_funcs") || > !strcmp(sec->name, "__mcount_loc") || > !strcmp(sec->name, ".llvm.call-graph-profile") || > !strcmp(sec->name, ".llvm_bb_addr_map") || > diff --git a/tools/objtool/include/objtool/klp.h > b/tools/objtool/include/objtool/klp.h > index ad830a7ce55b..e32e5e8bc631 100644 > --- a/tools/objtool/include/objtool/klp.h > +++ b/tools/objtool/include/objtool/klp.h > @@ -6,12 +6,12 @@ > #define SHN_LIVEPATCH 0xff20 > > /* > - * __klp_objects and __klp_funcs are created by klp diff and used by the > patch > - * module init code to build the klp_patch, klp_object and klp_func structs > - * needed by the livepatch API. > + * .init.klp_objects and .init.klp_funcs are created by klp diff and used by > the > + * patch module init code to build the klp_patch, klp_object and klp_func > + * structs needed by the livepatch API. > */ > -#define KLP_OBJECTS_SEC "__klp_objects" > -#define KLP_FUNCS_SEC "__klp_funcs" > +#define KLP_OBJECTS_SEC ".init.klp_objects" > +#define KLP_FUNCS_SEC ".init.klp_funcs" > > /* > * __klp_relocs is an intermediate section which are created by klp diff and > diff --git a/tools/objtool/klp-diff.c b/tools/objtool/klp-diff.c > index 4d1f9e9977eb..fd64d5e3c3b6 100644 > --- a/tools/objtool/klp-diff.c > +++ b/tools/objtool/klp-diff.c > @@ -1439,7 +1439,7 @@ static int clone_special_sections(struct elfs *e) > } > > /* > - * Create __klp_objects and __klp_funcs sections which are intermediate > + * Create .init.klp_objects and .init.klp_funcs sections which are > intermediate > * sections provided as input to the patch module's init code for building > the > * klp_patch, klp_object and klp_func structs for the livepatch API. > */ > -- > 2.52.0 >
Acked-by: Joe Lawrence <[email protected]> -- Joe

