Re: [PATCH 05/14] objtool/klp: Add .klp.symid for sympos disambiguation
Josh Poimboeuf <[email protected]>
| Newsgroups | org.kernel.vger.linux-modules,org.kernel.vger.live-patching |
|---|---|
| Message-ID | <anzWBbrO2H0ohACw@jpoimboe> |
On Wed, Aug 12, 2026 at 02:13:00PM +0100, Puranjay Mohan wrote: > Applying the patch below fixes it: > > -- >8 -- > > From 93c99313870d7375ab07e494c2d0d971758578eb Mon Sep 17 00:00:00 2001 > From: Puranjay Mohan <[email protected]> > 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 <[email protected]> Indeed, I'll add it to the queue, thanks! -- Josh