|
Oscar Salvador |
a5e7cb |
From fa71cc4400924859467812705749ee9b98b3eec6 Mon Sep 17 00:00:00 2001
|
|
Oscar Salvador |
a5e7cb |
From: Oscar Salvador <osalvador@suse.de>
|
|
Oscar Salvador |
a5e7cb |
Date: Wed, 5 Oct 2022 18:09:21 +0200
|
|
Oscar Salvador |
a5e7cb |
Subject: [PATCH] arm64: Discard .note.GNU-stack section
|
|
Oscar Salvador |
a5e7cb |
Patch-mainline: Never, SUSE specific
|
|
Oscar Salvador |
a5e7cb |
References: bsc#1203693
|
|
Oscar Salvador |
a5e7cb |
|
|
Oscar Salvador |
a5e7cb |
Commit "Makefile: link with -z noexecstack --no-warn-rwx-segments: ddbd47d2219a"
|
|
Oscar Salvador |
a5e7cb |
creates a new section .note.GNU-stack, which is not discarded by arm64.
|
|
Oscar Salvador |
a5e7cb |
This changes the ELF layout and causes the build to fail on arm64.
|
|
Oscar Salvador |
a5e7cb |
|
|
Oscar Salvador |
a5e7cb |
Quoting Michal Matz:
|
|
Oscar Salvador |
a5e7cb |
|
|
Oscar Salvador |
a5e7cb |
"The .note.GNU-stack section in head.o is created by 'ld -r -z noexecstack',
|
|
Oscar Salvador |
a5e7cb |
when relinking head.o into head.o (for various reasons). That section is created
|
|
Oscar Salvador |
a5e7cb |
with SHT_PROGBITS, and as the kernel linker script doesn't discard those
|
|
Oscar Salvador |
a5e7cb |
it also makes the output ".notes" section (which
|
|
Oscar Salvador |
a5e7cb |
collects all .note* sections) SHT_PROGBITS, which in turn makes ld not generate
|
|
Oscar Salvador |
a5e7cb |
a PT_NOTE segment covering all these.
|
|
Oscar Salvador |
a5e7cb |
|
|
Oscar Salvador |
a5e7cb |
Now, I initially thought the linker with 'ld -r', when generating a
|
|
Oscar Salvador |
a5e7cb |
.note.GNU-stack section because of a command line option should simply create it
|
|
Oscar Salvador |
a5e7cb |
with the type SHT_NOTE and all would be well. That somewhat works, but is actually
|
|
Oscar Salvador |
a5e7cb |
wrong: a SHT_NOTE section has a specific layout per the gABI (at least
|
|
Oscar Salvador |
a5e7cb |
it must contain a header), but .note.GNU-stack is empty. So it really can't
|
|
Oscar Salvador |
a5e7cb |
be SHT_NOTE but must remain either SHT_PROGBITS or SHT_NOBITS."
|
|
Oscar Salvador |
a5e7cb |
|
|
Oscar Salvador |
a5e7cb |
Fix it for now by discarding that section.
|
|
Oscar Salvador |
a5e7cb |
|
|
Oscar Salvador |
a5e7cb |
Signed-off-by: Oscar Salvador <osalvador@suse.de>
|
|
Oscar Salvador |
a5e7cb |
Suggested-by: Michael Matz
|
|
Oscar Salvador |
a5e7cb |
---
|
|
Oscar Salvador |
a5e7cb |
arch/arm64/kernel/vmlinux.lds.S | 1 +
|
|
Oscar Salvador |
a5e7cb |
1 file changed, 1 insertion(+)
|
|
Oscar Salvador |
a5e7cb |
|
|
Oscar Salvador |
a5e7cb |
diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
|
|
Oscar Salvador |
a5e7cb |
index 1a40822bbbc5..cd061a9f135d 100644
|
|
Oscar Salvador |
a5e7cb |
--- a/arch/arm64/kernel/vmlinux.lds.S
|
|
Oscar Salvador |
a5e7cb |
+++ b/arch/arm64/kernel/vmlinux.lds.S
|
|
Oscar Salvador |
a5e7cb |
@@ -139,6 +139,7 @@ SECTIONS
|
|
Oscar Salvador |
a5e7cb |
/DISCARD/ : {
|
|
Oscar Salvador |
a5e7cb |
*(.interp .dynamic)
|
|
Oscar Salvador |
a5e7cb |
*(.dynsym .dynstr .hash .gnu.hash)
|
|
Oscar Salvador |
a5e7cb |
+ *(.note.GNU-stack)
|
|
Oscar Salvador |
a5e7cb |
}
|
|
Oscar Salvador |
a5e7cb |
|
|
Oscar Salvador |
a5e7cb |
. = KIMAGE_VADDR;
|
|
Oscar Salvador |
a5e7cb |
--
|
|
Oscar Salvador |
a5e7cb |
2.35.3
|
|
Oscar Salvador |
a5e7cb |
|