From: Joe Lawrence <joe.lawrence@redhat.com>
To: Petr Pavlu <petr.pavlu@suse.com>
Cc: Josh Poimboeuf <jpoimboe@kernel.org>,
Jiri Kosina <jikos@kernel.org>, Miroslav Benes <mbenes@suse.cz>,
Petr Mladek <pmladek@suse.com>,
Luis Chamberlain <mcgrof@kernel.org>,
Daniel Gomez <da.gomez@kernel.org>,
Sami Tolvanen <samitolvanen@google.com>,
Aaron Tomlin <atomlin@atomlin.com>,
Peter Zijlstra <peterz@infradead.org>,
live-patching@vger.kernel.org, linux-modules@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] livepatch: Free klp_{object,func}_ext data after initialization
Date: Mon, 19 Jan 2026 17:22:16 -0500 [thread overview]
Message-ID: <aW6umBkI2NhVyXYz@redhat.com> (raw)
In-Reply-To: <20260114123056.2045816-3-petr.pavlu@suse.com>
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 <petr.pavlu@suse.com>
> ---
> 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 <joe.lawrence@redhat.com>
--
Joe
prev parent reply other threads:[~2026-01-19 22:22 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-14 12:29 [PATCH 0/2] Improve handling of the __klp_{objects,funcs} sections in modules Petr Pavlu
2026-01-14 12:29 ` [PATCH 1/2] livepatch: Fix having __klp_objects relics in non-livepatch modules Petr Pavlu
2026-01-19 22:19 ` Joe Lawrence
2026-01-20 17:48 ` Petr Pavlu
2026-01-14 12:29 ` [PATCH 2/2] livepatch: Free klp_{object,func}_ext data after initialization Petr Pavlu
2026-01-19 22:22 ` Joe Lawrence [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aW6umBkI2NhVyXYz@redhat.com \
--to=joe.lawrence@redhat.com \
--cc=atomlin@atomlin.com \
--cc=da.gomez@kernel.org \
--cc=jikos@kernel.org \
--cc=jpoimboe@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-modules@vger.kernel.org \
--cc=live-patching@vger.kernel.org \
--cc=mbenes@suse.cz \
--cc=mcgrof@kernel.org \
--cc=peterz@infradead.org \
--cc=petr.pavlu@suse.com \
--cc=pmladek@suse.com \
--cc=samitolvanen@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox