From: Puranjay Mohan <puranjay@kernel.org>
To: Josh Poimboeuf <jpoimboe@kernel.org>, sashiko-bot@kernel.org
Cc: linux-modules@vger.kernel.org,
Puranjay Mohan <puranjay12@gmail.com>,
live-patching@vger.kernel.org
Subject: Re: [PATCH 05/14] objtool/klp: Add .klp.symid for sympos disambiguation
Date: Wed, 12 Aug 2026 14:13:00 +0100 [thread overview]
Message-ID: <m24igzlbxf.fsf@kernel.org> (raw)
In-Reply-To: <7avwg6oos7kjtotwlpcxhy5qiviu5gzhwew2ibjcfccu4vbonu@25ayhrgt7b33>
Josh Poimboeuf <jpoimboe@kernel.org> writes:
> On Mon, Aug 03, 2026 at 03:41:15AM +0000, sashiko-bot@kernel.org wrote:
>> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
>> - [Low] Relocations in .klp.symid pointing to discarded sections (.exitcall.exit, .exit.text, etc.) will cause a link-time error when building vmlinux.
>> --
>>
>> --- Patch [5]: [PATCH 05/14] objtool/klp: Add .klp.symid for sympos disambiguation ---
>> commit 09454266fcd41f3c022cac215ab86d1269c37d52
>> Author: Josh Poimboeuf <jpoimboe@kernel.org>
>>
>> objtool/klp: Add .klp.symid for sympos disambiguation
>>
>> This commit introduces a new .klp.symid section to vmlinux.o to help
>> livepatch reliably determine the sympos of duplicate-named symbols. It
>> emits an array of identifiers and relocations that survives the final link,
>> allowing klp-diff to correlate symbols between vmlinux.o and vmlinux.
>>
>> > diff --git a/tools/objtool/klp-symid.c b/tools/objtool/klp-symid.c
>> > new file mode 100644
>> > index 0000000000000..cf188cdfa6079
>> > --- /dev/null
>> > +++ b/tools/objtool/klp-symid.c
>> [ ... ]
>> > +static const char * const discarded_secs[] = {
>> > + ".discard",
>> > + ".modinfo",
>> > + "__tracepoint_check",
>> > +};
>> > +
>> > +static bool discarded_sec(struct section *sec)
>> > +{
>> > + if (!(sec->sh.sh_flags & SHF_ALLOC))
>> > + return true;
>> > +
>> > + for (int i = 0; i < ARRAY_SIZE(discarded_secs); i++)
>> > + if (strstarts(sec->name, discarded_secs[i]))
>> > + return true;
>> > +
>> > + return false;
>> > +}
>>
>> [Severity: Low]
>> Should the discarded_secs array also include .exitcall.exit and .exit.
>> sections?
>>
>> Because these exit sections have the SHF_ALLOC flag set, the first check in
>> discarded_sec() will not catch them. If they are also omitted from the
>> discarded_secs array, klp_create_symid_sections() will mistakenly generate
>> relocations pointing to them.
>>
>> Since the linker script unconditionally discards .exitcall.exit via the
>> DISCARDS macro, generating relocations against it causes a deterministic
>> link-time error ("relocation refers to a discarded section") when building
>> vmlinux.
>>
>> Could this happen in practice? Common driver exit handlers (e.g.,
>> module_cleanup used by drivers like cx18 and ivtv) often result in
>> duplicate static symbols like __exitcall_module_cleanup in the
>> .exitcall.exit section when the modules are built-in.
>
> I'm not convinced this can happen in practice. Why would somebody be
> trying to patch or reference a module exit symbol anyway?
I see this on my arm64 host with your arm64 support patches applied:
make KLP_SYMIDS=1 -j$(nproc) vmlinux
DESCEND objtool
DESCEND bpf/resolve_btfids
INSTALL libsubcmd_headers
UPD include/generated/utsversion.h
CC init/version-timestamp.o
KSYMS .tmp_vmlinux0.kallsyms.S
AS .tmp_vmlinux0.kallsyms.o
LD .tmp_vmlinux1
`__exitcall_aes_mod_exit' referenced in section `.klp.symid' of vmlinux.o: defined in discarded section `.exitcall.exit' of vmlinux.o
`__exitcall_aes_mod_exit' referenced in section `.klp.symid' of vmlinux.o: defined in discarded section `.exitcall.exit' of vmlinux.o
`__exitcall_dax_exit' referenced in section `.klp.symid' of vmlinux.o: defined in discarded section `.exitcall.exit' of vmlinux.o
`__exitcall_dax_exit' referenced in section `.klp.symid' of vmlinux.o: defined in discarded section `.exitcall.exit' of vmlinux.o
`__exitcall_usb_serial_module_exit' referenced in section `.klp.symid' of vmlinux.o: defined in discarded section `.exitcall.exit' of vmlinux.o
`__exitcall_usb_serial_module_exit' referenced in section `.klp.symid' of vmlinux.o: defined in discarded section `.exitcall.exit' of vmlinux.o
`__exitcall_hid_exit' referenced in section `.klp.symid' of vmlinux.o: defined in discarded section `.exitcall.exit' of vmlinux.o
`__exitcall_hid_exit' referenced in section `.klp.symid' of vmlinux.o: defined in discarded section `.exitcall.exit' of vmlinux.o
make[2]: *** [scripts/Makefile.vmlinux:72: vmlinux.unstripped] Error 1
make[1]: *** [/data/users/pjy/linux_worktrees/meta_klp_build/Makefile:1341: vmlinux] Error 2
make: *** [Makefile:248: __sub-make] Error 2
Applying the patch below fixes it:
-- >8 --
From 93c99313870d7375ab07e494c2d0d971758578eb Mon Sep 17 00:00:00 2001
From: Puranjay Mohan <puranjay@kernel.org>
Date: Fri, 7 Aug 2026 11:16:29 -0700
Subject: [PATCH] objtool/klp: Fix vmlinux .klp.symid link error for
.exitcall.exit symbols
Building a kernel via klp-build fails to link:
`__exitcall_aes_mod_exit' referenced in section `.klp.symid' of vmlinux.o: defined in discarded section `.exitcall.exit' of vmlinux.o
`__exitcall_dax_exit' referenced in section `.klp.symid' of vmlinux.o: defined in discarded section `.exitcall.exit' of vmlinux.o
`__exitcall_hid_exit' referenced in section `.klp.symid' of vmlinux.o: defined in discarded section `.exitcall.exit' of vmlinux.o
`__exitcall_usb_serial_module_exit' referenced in section `.klp.symid' of vmlinux.o: defined in discarded section `.exitcall.exit' of vmlinux.o
module_exit() on a built-in emits a static __exitcall_$fn pointer into
.exitcall.exit, which vmlinux.lds.h discards unconditionally via
EXIT_CALL. When two built-in translation units define a module_exit()
function of the same name, the resulting local symbols collide,
symid_needed() sees a duplicate and emits a .klp.symid entry for each,
referencing symbols the linker then throws away.
Same-named module_exit() functions are not rare:
dax_exit drivers/dax/device.c, drivers/dax/fsdev.c
hid_exit drivers/hid/hid-core.c, drivers/hid/usbhid/hid-core.c
aes_mod_exit arch/arm64/crypto/aes-ce-ccm-glue.c, lib/crypto/aes.c
usb_serial_module_exit module_usb_serial_driver() expands to this fixed
name in each of its ~49 users
The last one makes the collision structural rather than accidental: any
kernel with two built-in USB serial drivers has it. This is not arch
specific either; it only requires the objects to be built in rather than
modular, which is why a monolithic config trips it while a typical
distro config does not.
Add .exitcall.exit to the discarded section list so its symbols don't get
symids.
This is the same failure mode as "objtool/klp: Fix vmlinux .klp.symid
link error for .no_trim_symbol symbols", for another unconditionally
discarded allocated section.
Fixes: 029223d30162 ("objtool/klp: Add .klp.symid for sympos disambiguation")
Signed-off-by: Puranjay Mohan <puranjay@kernel.org>
---
tools/objtool/klp-symid.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/tools/objtool/klp-symid.c b/tools/objtool/klp-symid.c
index 1934c2a1afc4d..1bdb8e4516e8f 100644
--- a/tools/objtool/klp-symid.c
+++ b/tools/objtool/klp-symid.c
@@ -30,6 +30,7 @@
static const char * const discarded_secs[] = {
".discard",
+ ".exitcall.exit",
".modinfo",
".no_trim_symbol",
"__tracepoint_check",
--
2.53.0-Meta
-- 8< --
Thanks,
Puranjay
next prev parent reply other threads:[~2026-08-12 13:13 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-03 3:24 [PATCH 00/14] objtool/klp: sympos/module/alternative/etc fixes Josh Poimboeuf
2026-08-03 3:24 ` [PATCH 01/14] objtool/klp: Fix module name normalization for paths with dots Josh Poimboeuf
2026-08-03 5:49 ` [tip: objtool/core] " tip-bot2 for Josh Poimboeuf
2026-08-03 3:24 ` [PATCH 02/14] objtool/klp: Normalize Module.symvers paths to module names Josh Poimboeuf
2026-08-03 3:37 ` sashiko-bot
2026-08-03 5:37 ` Josh Poimboeuf
2026-08-03 5:49 ` [tip: objtool/core] " tip-bot2 for Joe Lawrence
2026-08-03 3:24 ` [PATCH 03/14] objtool/klp: Fix false module dependencies caused by dead relocs Josh Poimboeuf
2026-08-03 5:49 ` [tip: objtool/core] " tip-bot2 for Josh Poimboeuf
2026-08-03 3:24 ` [PATCH 04/14] objtool/klp: Skip hidden directories when finding objects Josh Poimboeuf
2026-08-03 5:49 ` [tip: objtool/core] " tip-bot2 for Josh Poimboeuf
2026-08-03 3:24 ` [PATCH 05/14] objtool/klp: Add .klp.symid for sympos disambiguation Josh Poimboeuf
2026-08-03 3:41 ` sashiko-bot
2026-08-03 5:42 ` Josh Poimboeuf
2026-08-12 13:13 ` Puranjay Mohan [this message]
2026-08-03 5:49 ` [tip: objtool/core] " tip-bot2 for Josh Poimboeuf
2026-08-03 6:12 ` sashiko-bot
2026-08-03 3:24 ` [PATCH 06/14] objtool/klp: Fix symbol resolution for duplicate data symbols Josh Poimboeuf
2026-08-03 5:49 ` [tip: objtool/core] " tip-bot2 for Josh Poimboeuf
2026-08-03 3:24 ` [PATCH 07/14] module: Add module_kallsyms_on_each_core_symbol() Josh Poimboeuf
2026-08-03 6:24 ` Josh Poimboeuf
2026-08-03 3:24 ` [PATCH 08/14] objtool/klp,livepatch: Resolve module symbols against core kallsyms Josh Poimboeuf
2026-08-03 3:53 ` sashiko-bot
2026-08-03 6:26 ` Josh Poimboeuf
2026-08-03 3:24 ` [PATCH 09/14] objtool/klp: Fix size of empty special section entries Josh Poimboeuf
2026-08-03 3:24 ` [PATCH 10/14] objtool/klp: Ignore replacement offset of empty x86 alternatives Josh Poimboeuf
2026-08-03 3:24 ` [PATCH 11/14] objtool/klp: Explicitly disallow patching or referencing init code/data Josh Poimboeuf
2026-08-03 3:24 ` [PATCH 12/14] objtool/klp: Fix cross-module klp relocation section naming Josh Poimboeuf
2026-08-03 3:24 ` [PATCH 13/14] objtool/klp: Don't match local symbols against exports Josh Poimboeuf
2026-08-03 3:24 ` [PATCH 14/14] objtool/klp: Allow new references to module exports Josh Poimboeuf
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=m24igzlbxf.fsf@kernel.org \
--to=puranjay@kernel.org \
--cc=jpoimboe@kernel.org \
--cc=linux-modules@vger.kernel.org \
--cc=live-patching@vger.kernel.org \
--cc=puranjay12@gmail.com \
--cc=sashiko-bot@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.