]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
module.lds,codetag: force 0 sh_addr for sections
authorJoe Lawrence <joe.lawrence@redhat.com>
Thu, 5 Mar 2026 01:52:37 +0000 (20:52 -0500)
committerSami Tolvanen <samitolvanen@google.com>
Tue, 17 Mar 2026 23:18:02 +0000 (23:18 +0000)
Commit 1ba9f8979426 ("vmlinux.lds: Unify TEXT_MAIN, DATA_MAIN, and
related macros") added .text and made .data, .bss, and .rodata sections
unconditional in the module linker script, but without an explicit
address like the other sections in the same file.

When linking modules with ld.bfd -r, sections defined without an address
inherit the location counter, resulting in non-zero sh_addr values in
the .ko.  Relocatable objects are expected to have sh_addr=0 for these
sections and these non-zero addresses confuse elfutils and have been
reported to cause segmentation faults in SystemTap [1].

Add the 0 address specifier to all sections in module.lds, including the
.codetag.* sections via MOD_SEPARATE_CODETAG_SECTIONS macro.

Link: https://sourceware.org/bugzilla/show_bug.cgi?id=33958
Fixes: 1ba9f8979426 ("vmlinux.lds: Unify TEXT_MAIN, DATA_MAIN, and related macros")
Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
Reviewed-by: Petr Pavlu <petr.pavlu@suse.com>
Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
include/asm-generic/codetag.lds.h
scripts/module.lds.S

index a14f4bdafddae836c9e85a2747e112824d9d0e55..4948e5d4e9d99b117349ccb043353fda5e91d5bf 100644 (file)
@@ -18,7 +18,7 @@
        IF_MEM_ALLOC_PROFILING(SECTION_WITH_BOUNDARIES(alloc_tags))
 
 #define MOD_SEPARATE_CODETAG_SECTION(_name)    \
-       .codetag.##_name : {                    \
+       .codetag.##_name 0 : {                  \
                SECTION_WITH_BOUNDARIES(_name)  \
        }
 
index 054ef99e828867695480c68c6c193b4a78015115..e1cab3cee3f7da71046dd46146316d0d72f81382 100644 (file)
@@ -32,30 +32,30 @@ SECTIONS {
        __jump_table            0 : ALIGN(8) { KEEP(*(__jump_table)) }
        __ex_table              0 : ALIGN(4) { KEEP(*(__ex_table)) }
 
-       __patchable_function_entries : { *(__patchable_function_entries) }
+       __patchable_function_entries : { *(__patchable_function_entries) }
 
        .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)) }
+       __kcfi_traps            : { KEEP(*(.kcfi_traps)) }
 #endif
 
-       .text : {
+       .text                   0 : {
                *(.text .text.[0-9a-zA-Z_]*)
        }
 
-       .bss : {
+       .bss                    0 : {
                *(.bss .bss.[0-9a-zA-Z_]*)
                *(.bss..L*)
        }
 
-       .data : {
+       .data                   0 : {
                *(.data .data.[0-9a-zA-Z_]*)
                *(.data..L*)
        }
 
-       .rodata : {
+       .rodata                 0 : {
                *(.rodata .rodata.[0-9a-zA-Z_]*)
                *(.rodata..L*)
        }