]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 22 Jan 2023 14:42:19 +0000 (15:42 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 22 Jan 2023 14:42:19 +0000 (15:42 +0100)
added patches:
powerpc-vmlinux.lds-define-runtime_discard_exit.patch
powerpc-vmlinux.lds-don-t-discard-.comment.patch
powerpc-vmlinux.lds-don-t-discard-.rela-for-relocatable-builds.patch
s390-define-runtime_discard_exit-to-fix-link-error-with-gnu-ld-2.36.patch

queue-5.15/powerpc-vmlinux.lds-define-runtime_discard_exit.patch [new file with mode: 0644]
queue-5.15/powerpc-vmlinux.lds-don-t-discard-.comment.patch [new file with mode: 0644]
queue-5.15/powerpc-vmlinux.lds-don-t-discard-.rela-for-relocatable-builds.patch [new file with mode: 0644]
queue-5.15/s390-define-runtime_discard_exit-to-fix-link-error-with-gnu-ld-2.36.patch [new file with mode: 0644]
queue-5.15/series

diff --git a/queue-5.15/powerpc-vmlinux.lds-define-runtime_discard_exit.patch b/queue-5.15/powerpc-vmlinux.lds-define-runtime_discard_exit.patch
new file mode 100644 (file)
index 0000000..93e8011
--- /dev/null
@@ -0,0 +1,54 @@
+From 4b9880dbf3bdba3a7c56445137c3d0e30aaa0a40 Mon Sep 17 00:00:00 2001
+From: Michael Ellerman <mpe@ellerman.id.au>
+Date: Thu, 5 Jan 2023 22:05:04 +1100
+Subject: powerpc/vmlinux.lds: Define RUNTIME_DISCARD_EXIT
+
+From: Michael Ellerman <mpe@ellerman.id.au>
+
+commit 4b9880dbf3bdba3a7c56445137c3d0e30aaa0a40 upstream.
+
+The powerpc linker script explicitly includes .exit.text, because
+otherwise the link fails due to references from __bug_table and
+__ex_table. The code is freed (discarded) at runtime along with
+.init.text and data.
+
+That has worked in the past despite powerpc not defining
+RUNTIME_DISCARD_EXIT because DISCARDS appears late in the powerpc linker
+script (line 410), and the explicit inclusion of .exit.text
+earlier (line 280) supersedes the discard.
+
+However commit 99cb0d917ffa ("arch: fix broken BuildID for arm64 and
+riscv") introduced an earlier use of DISCARD as part of the RO_DATA
+macro (line 136). With binutils < 2.36 that causes the DISCARD
+directives later in the script to be applied earlier [1], causing
+.exit.text to actually be discarded at link time, leading to build
+errors:
+
+  '.exit.text' referenced in section '__bug_table' of crypto/algboss.o: defined in
+  discarded section '.exit.text' of crypto/algboss.o
+  '.exit.text' referenced in section '__ex_table' of drivers/nvdimm/core.o: defined in
+  discarded section '.exit.text' of drivers/nvdimm/core.o
+
+Fix it by defining RUNTIME_DISCARD_EXIT, which causes the generic
+DISCARDS macro to not include .exit.text at all.
+
+1: https://lore.kernel.org/lkml/87fscp2v7k.fsf@igel.home/
+
+Fixes: 99cb0d917ffa ("arch: fix broken BuildID for arm64 and riscv")
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20230105132349.384666-1-mpe@ellerman.id.au
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/powerpc/kernel/vmlinux.lds.S |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/arch/powerpc/kernel/vmlinux.lds.S
++++ b/arch/powerpc/kernel/vmlinux.lds.S
+@@ -8,6 +8,7 @@
+ #define BSS_FIRST_SECTIONS *(.bss.prominit)
+ #define EMITS_PT_NOTE
+ #define RO_EXCEPTION_TABLE_ALIGN      0
++#define RUNTIME_DISCARD_EXIT
+ #define SOFT_MASK_TABLE(align)                                                \
+       . = ALIGN(align);                                               \
diff --git a/queue-5.15/powerpc-vmlinux.lds-don-t-discard-.comment.patch b/queue-5.15/powerpc-vmlinux.lds-don-t-discard-.comment.patch
new file mode 100644 (file)
index 0000000..631e8df
--- /dev/null
@@ -0,0 +1,43 @@
+From be5f95c8779e19779dd81927c8574fec5aaba36c Mon Sep 17 00:00:00 2001
+From: Michael Ellerman <mpe@ellerman.id.au>
+Date: Thu, 5 Jan 2023 22:42:59 +1100
+Subject: powerpc/vmlinux.lds: Don't discard .comment
+
+From: Michael Ellerman <mpe@ellerman.id.au>
+
+commit be5f95c8779e19779dd81927c8574fec5aaba36c upstream.
+
+Although the powerpc linker script mentions .comment in the DISCARD
+section, that has never actually caused it to be discarded, because the
+earlier ELF_DETAILS macro (previously STABS_DEBUG) explicitly includes
+.comment.
+
+However commit 99cb0d917ffa ("arch: fix broken BuildID for arm64 and
+riscv") introduced an earlier use of DISCARD as part of the RO_DATA
+macro. With binutils < 2.36 that causes the DISCARD directives later in
+the script to be applied earlier, causing .comment to actually be
+discarded.
+
+It's confusing to explicitly include and discard .comment, and even more
+so if the behaviour depends on the toolchain version. So don't discard
+.comment in order to maintain the existing behaviour in all cases.
+
+Fixes: 83a092cf95f2 ("powerpc: Link warning for orphan sections")
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20230105132349.384666-3-mpe@ellerman.id.au
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/powerpc/kernel/vmlinux.lds.S |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/powerpc/kernel/vmlinux.lds.S
++++ b/arch/powerpc/kernel/vmlinux.lds.S
+@@ -400,7 +400,7 @@ SECTIONS
+       DISCARDS
+       /DISCARD/ : {
+               *(*.EMB.apuinfo)
+-              *(.glink .iplt .plt .comment)
++              *(.glink .iplt .plt)
+               *(.gnu.version*)
+               *(.gnu.attributes)
+               *(.eh_frame)
diff --git a/queue-5.15/powerpc-vmlinux.lds-don-t-discard-.rela-for-relocatable-builds.patch b/queue-5.15/powerpc-vmlinux.lds-don-t-discard-.rela-for-relocatable-builds.patch
new file mode 100644 (file)
index 0000000..8638f6a
--- /dev/null
@@ -0,0 +1,53 @@
+From 07b050f9290ee012a407a0f64151db902a1520f5 Mon Sep 17 00:00:00 2001
+From: Michael Ellerman <mpe@ellerman.id.au>
+Date: Thu, 5 Jan 2023 22:28:36 +1100
+Subject: powerpc/vmlinux.lds: Don't discard .rela* for relocatable builds
+
+From: Michael Ellerman <mpe@ellerman.id.au>
+
+commit 07b050f9290ee012a407a0f64151db902a1520f5 upstream.
+
+Relocatable kernels must not discard relocations, they need to be
+processed at runtime. As such they are included for CONFIG_RELOCATABLE
+builds in the powerpc linker script (line 340).
+
+However they are also unconditionally discarded later in the
+script (line 414). Previously that worked because the earlier inclusion
+superseded the discard.
+
+However commit 99cb0d917ffa ("arch: fix broken BuildID for arm64 and
+riscv") introduced an earlier use of DISCARD as part of the RO_DATA
+macro (line 137). With binutils < 2.36 that causes the DISCARD
+directives later in the script to be applied earlier, causing .rela* to
+actually be discarded at link time, leading to build warnings and a
+kernel that doesn't boot:
+
+  ld: warning: discarding dynamic section .rela.init.rodata
+
+Fix it by conditionally discarding .rela* only when CONFIG_RELOCATABLE
+is disabled.
+
+Fixes: 99cb0d917ffa ("arch: fix broken BuildID for arm64 and riscv")
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20230105132349.384666-2-mpe@ellerman.id.au
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/powerpc/kernel/vmlinux.lds.S |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/arch/powerpc/kernel/vmlinux.lds.S
++++ b/arch/powerpc/kernel/vmlinux.lds.S
+@@ -400,9 +400,12 @@ SECTIONS
+       DISCARDS
+       /DISCARD/ : {
+               *(*.EMB.apuinfo)
+-              *(.glink .iplt .plt .rela* .comment)
++              *(.glink .iplt .plt .comment)
+               *(.gnu.version*)
+               *(.gnu.attributes)
+               *(.eh_frame)
++#ifndef CONFIG_RELOCATABLE
++              *(.rela*)
++#endif
+       }
+ }
diff --git a/queue-5.15/s390-define-runtime_discard_exit-to-fix-link-error-with-gnu-ld-2.36.patch b/queue-5.15/s390-define-runtime_discard_exit-to-fix-link-error-with-gnu-ld-2.36.patch
new file mode 100644 (file)
index 0000000..9bda5bd
--- /dev/null
@@ -0,0 +1,69 @@
+From a494398bde273143c2352dd373cad8211f7d94b2 Mon Sep 17 00:00:00 2001
+From: Masahiro Yamada <masahiroy@kernel.org>
+Date: Thu, 5 Jan 2023 12:13:06 +0900
+Subject: s390: define RUNTIME_DISCARD_EXIT to fix link error with GNU ld < 2.36
+
+From: Masahiro Yamada <masahiroy@kernel.org>
+
+commit a494398bde273143c2352dd373cad8211f7d94b2 upstream.
+
+Nathan Chancellor reports that the s390 vmlinux fails to link with
+GNU ld < 2.36 since commit 99cb0d917ffa ("arch: fix broken BuildID
+for arm64 and riscv").
+
+It happens for defconfig, or more specifically for CONFIG_EXPOLINE=y.
+
+  $ s390x-linux-gnu-ld --version | head -n1
+  GNU ld (GNU Binutils for Debian) 2.35.2
+  $ make -s ARCH=s390 CROSS_COMPILE=s390x-linux-gnu- allnoconfig
+  $ ./scripts/config -e CONFIG_EXPOLINE
+  $ make -s ARCH=s390 CROSS_COMPILE=s390x-linux-gnu- olddefconfig
+  $ make -s ARCH=s390 CROSS_COMPILE=s390x-linux-gnu-
+  `.exit.text' referenced in section `.s390_return_reg' of drivers/base/dd.o: defined in discarded section `.exit.text' of drivers/base/dd.o
+  make[1]: *** [scripts/Makefile.vmlinux:34: vmlinux] Error 1
+  make: *** [Makefile:1252: vmlinux] Error 2
+
+arch/s390/kernel/vmlinux.lds.S wants to keep EXIT_TEXT:
+
+        .exit.text : {
+                EXIT_TEXT
+        }
+
+But, at the same time, EXIT_TEXT is thrown away by DISCARD because
+s390 does not define RUNTIME_DISCARD_EXIT.
+
+I still do not understand why the latter wins after 99cb0d917ffa,
+but defining RUNTIME_DISCARD_EXIT seems correct because the comment
+line in arch/s390/kernel/vmlinux.lds.S says:
+
+        /*
+         * .exit.text is discarded at runtime, not link time,
+         * to deal with references from __bug_table
+         */
+
+Nathan also found that binutils commit 21401fc7bf67 ("Duplicate output
+sections in scripts") cured this issue, so we cannot reproduce it with
+binutils 2.36+, but it is better to not rely on it.
+
+Fixes: 99cb0d917ffa ("arch: fix broken BuildID for arm64 and riscv")
+Link: https://lore.kernel.org/all/Y7Jal56f6UBh1abE@dev-arch.thelio-3990X/
+Reported-by: Nathan Chancellor <nathan@kernel.org>
+Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
+Link: https://lore.kernel.org/r/20230105031306.1455409-1-masahiroy@kernel.org
+Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/s390/kernel/vmlinux.lds.S |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/arch/s390/kernel/vmlinux.lds.S
++++ b/arch/s390/kernel/vmlinux.lds.S
+@@ -17,6 +17,8 @@
+ /* Handle ro_after_init data on our own. */
+ #define RO_AFTER_INIT_DATA
++#define RUNTIME_DISCARD_EXIT
++
+ #define EMITS_PT_NOTE
+ #include <asm-generic/vmlinux.lds.h>
index dfd8a25ca31b2d798037e5c4e9f224666f7406fb..4a3de06c1f0e21834e6912122c492204893799cf 100644 (file)
@@ -104,3 +104,7 @@ revert-drm-amdgpu-make-display-pinning-more-flexible-v2.patch
 x86-fpu-use-_alignof-to-avoid-undefined-behavior-in-type_align.patch
 tracing-use-alignof__-struct-type-b-instead-of-offsetof.patch
 arch-fix-broken-buildid-for-arm64-and-riscv.patch
+s390-define-runtime_discard_exit-to-fix-link-error-with-gnu-ld-2.36.patch
+powerpc-vmlinux.lds-define-runtime_discard_exit.patch
+powerpc-vmlinux.lds-don-t-discard-.rela-for-relocatable-builds.patch
+powerpc-vmlinux.lds-don-t-discard-.comment.patch