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


Reply via email to