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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.