]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 11 Jan 2019 05:37:19 +0000 (06:37 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 11 Jan 2019 05:37:19 +0000 (06:37 +0100)
added patches:
arm64-relocatable-fix-inconsistencies-in-linker-script-and-options.patch

queue-4.19/arm64-relocatable-fix-inconsistencies-in-linker-script-and-options.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/arm64-relocatable-fix-inconsistencies-in-linker-script-and-options.patch b/queue-4.19/arm64-relocatable-fix-inconsistencies-in-linker-script-and-options.patch
new file mode 100644 (file)
index 0000000..b3dd365
--- /dev/null
@@ -0,0 +1,96 @@
+From 3bbd3db86470c701091fb1d67f1fab6621debf50 Mon Sep 17 00:00:00 2001
+From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+Date: Mon, 3 Dec 2018 20:58:05 +0100
+Subject: arm64: relocatable: fix inconsistencies in linker script and options
+
+From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+
+commit 3bbd3db86470c701091fb1d67f1fab6621debf50 upstream.
+
+readelf complains about the section layout of vmlinux when building
+with CONFIG_RELOCATABLE=y (for KASLR):
+
+  readelf: Warning: [21]: Link field (0) should index a symtab section.
+  readelf: Warning: [21]: Info field (0) should index a relocatable section.
+
+Also, it seems that our use of '-pie -shared' is contradictory, and
+thus ambiguous. In general, the way KASLR is wired up at the moment
+is highly tailored to how ld.bfd happens to implement (and conflate)
+PIE executables and shared libraries, so given the current effort to
+support other toolchains, let's fix some of these issues as well.
+
+- Drop the -pie linker argument and just leave -shared. In ld.bfd,
+  the differences between them are unclear (except for the ELF type
+  of the produced image [0]) but lld chokes on seeing both at the
+  same time.
+
+- Rename the .rela output section to .rela.dyn, as is customary for
+  shared libraries and PIE executables, so that it is not misidentified
+  by readelf as a static relocation section (producing the warnings
+  above).
+
+- Pass the -z notext and -z norelro options to explicitly instruct the
+  linker to permit text relocations, and to omit the RELRO program
+  header (which requires a certain section layout that we don't adhere
+  to in the kernel). These are the defaults for current versions of
+  ld.bfd.
+
+- Discard .eh_frame and .gnu.hash sections to avoid them from being
+  emitted between .head.text and .text, screwing up the section layout.
+
+These changes only affect the ELF image, and produce the same binary
+image.
+
+[0] b9dce7f1ba01 ("arm64: kernel: force ET_DYN ELF type for ...")
+
+Cc: Nick Desaulniers <ndesaulniers@google.com>
+Cc: Peter Smith <peter.smith@linaro.org>
+Tested-by: Nick Desaulniers <ndesaulniers@google.com>
+Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+Signed-off-by: Will Deacon <will.deacon@arm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm64/Makefile             |    2 +-
+ arch/arm64/kernel/vmlinux.lds.S |    9 +++++----
+ 2 files changed, 6 insertions(+), 5 deletions(-)
+
+--- a/arch/arm64/Makefile
++++ b/arch/arm64/Makefile
+@@ -18,7 +18,7 @@ ifeq ($(CONFIG_RELOCATABLE), y)
+ # Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
+ # for relative relocs, since this leads to better Image compression
+ # with the relocation offsets always being zero.
+-LDFLAGS_vmlinux               += -pie -shared -Bsymbolic \
++LDFLAGS_vmlinux               += -shared -Bsymbolic -z notext -z norelro \
+                       $(call ld-option, --no-apply-dynamic-relocs)
+ endif
+--- a/arch/arm64/kernel/vmlinux.lds.S
++++ b/arch/arm64/kernel/vmlinux.lds.S
+@@ -99,7 +99,8 @@ SECTIONS
+               *(.discard)
+               *(.discard.*)
+               *(.interp .dynamic)
+-              *(.dynsym .dynstr .hash)
++              *(.dynsym .dynstr .hash .gnu.hash)
++              *(.eh_frame)
+       }
+       . = KIMAGE_VADDR + TEXT_OFFSET;
+@@ -176,12 +177,12 @@ SECTIONS
+       PERCPU_SECTION(L1_CACHE_BYTES)
+-      .rela : ALIGN(8) {
++      .rela.dyn : ALIGN(8) {
+               *(.rela .rela*)
+       }
+-      __rela_offset   = ABSOLUTE(ADDR(.rela) - KIMAGE_VADDR);
+-      __rela_size     = SIZEOF(.rela);
++      __rela_offset   = ABSOLUTE(ADDR(.rela.dyn) - KIMAGE_VADDR);
++      __rela_size     = SIZEOF(.rela.dyn);
+       . = ALIGN(SEGMENT_ALIGN);
+       __initdata_end = .;
index 9e3267cd71c3fc511d1d57a8d5fe1247c1c98c61..a22e9932e6a7d41058d8b84236d40b714461345b 100644 (file)
@@ -123,3 +123,4 @@ pci-pm-allow-runtime-pm-without-callback-functions.patch
 lockd-show-pid-of-lockd-for-remote-locks.patch
 nfsd4-zero-length-write-should-succeed.patch
 arm64-drop-linker-script-hack-to-hide-__efistub_-symbols.patch
+arm64-relocatable-fix-inconsistencies-in-linker-script-and-options.patch