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