From: Greg Kroah-Hartman Date: Fri, 11 Jun 2021 14:01:36 +0000 (+0200) Subject: 5.4-stable patches X-Git-Tag: v4.4.273~52 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=509d53c6002c081424293576b7f41643d309ff6e;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches added patches: x86-boot-add-.text.-to-setup.ld.patch --- diff --git a/queue-5.4/series b/queue-5.4/series index d3be8c8ee86..6c2849c80ed 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -34,3 +34,4 @@ spi-don-t-have-controller-clean-up-spi-device-before.patch spi-cleanup-on-failure-of-initial-setup.patch i2c-mpc-make-use-of-i2c_recover_bus.patch i2c-mpc-implement-erratum-a-004447-workaround.patch +x86-boot-add-.text.-to-setup.ld.patch diff --git a/queue-5.4/x86-boot-add-.text.-to-setup.ld.patch b/queue-5.4/x86-boot-add-.text.-to-setup.ld.patch new file mode 100644 index 00000000000..0853c9a2038 --- /dev/null +++ b/queue-5.4/x86-boot-add-.text.-to-setup.ld.patch @@ -0,0 +1,94 @@ +From 2e7a858ba843d2e6ceab1ba996805411de51b340 Mon Sep 17 00:00:00 2001 +From: Arvind Sankar +Date: Fri, 31 Jul 2020 16:07:48 -0700 +Subject: x86/boot: Add .text.* to setup.ld + +From: Arvind Sankar + +commit 2e7a858ba843d2e6ceab1ba996805411de51b340 upstream. + +GCC puts the main function into .text.startup when compiled with -Os (or +-O2). This results in arch/x86/boot/main.c having a .text.startup +section which is currently not included explicitly in the linker script +setup.ld in the same directory. + +The BFD linker places this orphan section immediately after .text, so +this still works. However, LLD git, since [1], is choosing to place it +immediately after the .bstext section instead (this is the first code +section). This plays havoc with the section layout that setup.elf +requires to create the setup header, for eg on 64-bit: + + LD arch/x86/boot/setup.elf + ld.lld: error: section .text.startup file range overlaps with .header + >>> .text.startup range is [0x200040, 0x2001FE] + >>> .header range is [0x2001EF, 0x20026B] + + ld.lld: error: section .header file range overlaps with .bsdata + >>> .header range is [0x2001EF, 0x20026B] + >>> .bsdata range is [0x2001FF, 0x200398] + + ld.lld: error: section .bsdata file range overlaps with .entrytext + >>> .bsdata range is [0x2001FF, 0x200398] + >>> .entrytext range is [0x20026C, 0x2002D3] + + ld.lld: error: section .text.startup virtual address range overlaps + with .header + >>> .text.startup range is [0x40, 0x1FE] + >>> .header range is [0x1EF, 0x26B] + + ld.lld: error: section .header virtual address range overlaps with + .bsdata + >>> .header range is [0x1EF, 0x26B] + >>> .bsdata range is [0x1FF, 0x398] + + ld.lld: error: section .bsdata virtual address range overlaps with + .entrytext + >>> .bsdata range is [0x1FF, 0x398] + >>> .entrytext range is [0x26C, 0x2D3] + + ld.lld: error: section .text.startup load address range overlaps with + .header + >>> .text.startup range is [0x40, 0x1FE] + >>> .header range is [0x1EF, 0x26B] + + ld.lld: error: section .header load address range overlaps with + .bsdata + >>> .header range is [0x1EF, 0x26B] + >>> .bsdata range is [0x1FF, 0x398] + + ld.lld: error: section .bsdata load address range overlaps with + .entrytext + >>> .bsdata range is [0x1FF, 0x398] + >>> .entrytext range is [0x26C, 0x2D3] + +Add .text.* to the .text output section to fix this, and also prevent +any future surprises if the compiler decides to create other such +sections. + +[1] https://reviews.llvm.org/D75225 + +Signed-off-by: Arvind Sankar +Signed-off-by: Kees Cook +Signed-off-by: Ingo Molnar +Tested-by: Nick Desaulniers +Tested-by: Sedat Dilek +Reviewed-by: Kees Cook +Reviewed-by: Ard Biesheuvel +Reviewed-by: Fangrui Song +Link: https://lore.kernel.org/r/20200731230820.1742553-5-keescook@chromium.org +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/boot/setup.ld | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/x86/boot/setup.ld ++++ b/arch/x86/boot/setup.ld +@@ -20,7 +20,7 @@ SECTIONS + .initdata : { *(.initdata) } + __end_init = .; + +- .text : { *(.text) } ++ .text : { *(.text .text.*) } + .text32 : { *(.text32) } + + . = ALIGN(16);