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 .text, .bss, .data, and .rodata, and also
to __patchable_function_entries and __kcfi_traps which had the same
issue.

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 <[email protected]>
---
 scripts/module.lds.S | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/scripts/module.lds.S b/scripts/module.lds.S
index 054ef99e8288..e1cab3cee3f7 100644
--- a/scripts/module.lds.S
+++ b/scripts/module.lds.S
@@ -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 0 : { *(__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            0 : { 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*)
        }
-- 
2.53.0


Reply via email to