This is a note to let you know that I've just added the patch titled x86/boot: Drop PE/COFF .reloc section to the 6.1-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: x86-boot-drop-pe-coff-.reloc-section.patch and it can be found in the queue-6.1 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From stable+bounces-40250-greg=kroah.com@xxxxxxxxxxxxxxx Fri Apr 19 10:12:05 2024 From: Ard Biesheuvel <ardb+git@xxxxxxxxxx> Date: Fri, 19 Apr 2024 10:11:20 +0200 Subject: x86/boot: Drop PE/COFF .reloc section To: stable@xxxxxxxxxxxxxxx Message-ID: <20240419081105.3817596-39-ardb+git@xxxxxxxxxx> From: Ard Biesheuvel <ardb@xxxxxxxxxx> [ Commit fa5750521e0a4efbc1af05223da9c4bbd6c21c83 upstream ] Ancient buggy EFI loaders may have required a .reloc section to be present at some point in time, but this has not been true for a long time so the .reloc section can just be dropped. Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx> Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx> Link: https://lore.kernel.org/r/20230915171623.655440-16-ardb@xxxxxxxxxx Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- arch/x86/boot/header.S | 20 -------------------- arch/x86/boot/setup.ld | 4 ++-- arch/x86/boot/tools/build.c | 34 +++++----------------------------- 3 files changed, 7 insertions(+), 51 deletions(-) --- a/arch/x86/boot/header.S +++ b/arch/x86/boot/header.S @@ -154,26 +154,6 @@ section_table: IMAGE_SCN_MEM_READ | \ IMAGE_SCN_MEM_EXECUTE # Characteristics - # - # The EFI application loader requires a relocation section - # because EFI applications must be relocatable. The .reloc - # offset & size fields are filled in by build.c. - # - .ascii ".reloc" - .byte 0 - .byte 0 - .long 0 - .long 0 - .long 0 # SizeOfRawData - .long 0 # PointerToRawData - .long 0 # PointerToRelocations - .long 0 # PointerToLineNumbers - .word 0 # NumberOfRelocations - .word 0 # NumberOfLineNumbers - .long IMAGE_SCN_CNT_INITIALIZED_DATA | \ - IMAGE_SCN_MEM_READ | \ - IMAGE_SCN_MEM_DISCARDABLE # Characteristics - #ifdef CONFIG_EFI_MIXED # # The offset & size fields are filled in by build.c. --- a/arch/x86/boot/setup.ld +++ b/arch/x86/boot/setup.ld @@ -40,8 +40,8 @@ SECTIONS setup_sig = .; LONG(0x5a5aaa55) - /* Reserve some extra space for the reloc and compat sections */ - setup_size = ALIGN(ABSOLUTE(.) + 64, 512); + /* Reserve some extra space for the compat section */ + setup_size = ALIGN(ABSOLUTE(.) + 32, 512); setup_sects = ABSOLUTE(setup_size / 512); } --- a/arch/x86/boot/tools/build.c +++ b/arch/x86/boot/tools/build.c @@ -47,7 +47,6 @@ typedef unsigned int u32; /* This must be large enough to hold the entire setup */ u8 buf[SETUP_SECT_MAX*512]; -#define PECOFF_RELOC_RESERVE 0x20 #define PECOFF_COMPAT_RESERVE 0x20 static unsigned long efi32_pe_entry; @@ -180,24 +179,13 @@ static void update_pecoff_section_header update_pecoff_section_header_fields(section_name, offset, size, size, offset); } -static void update_pecoff_setup_and_reloc(unsigned int size) +static void update_pecoff_setup(unsigned int size) { u32 setup_offset = 0x200; - u32 reloc_offset = size - PECOFF_RELOC_RESERVE - PECOFF_COMPAT_RESERVE; -#ifdef CONFIG_EFI_MIXED - u32 compat_offset = reloc_offset + PECOFF_RELOC_RESERVE; -#endif - u32 setup_size = reloc_offset - setup_offset; + u32 compat_offset = size - PECOFF_COMPAT_RESERVE; + u32 setup_size = compat_offset - setup_offset; update_pecoff_section_header(".setup", setup_offset, setup_size); - update_pecoff_section_header(".reloc", reloc_offset, PECOFF_RELOC_RESERVE); - - /* - * Modify .reloc section contents with a single entry. The - * relocation is applied to offset 10 of the relocation section. - */ - put_unaligned_le32(reloc_offset + 10, &buf[reloc_offset]); - put_unaligned_le32(10, &buf[reloc_offset + 4]); #ifdef CONFIG_EFI_MIXED update_pecoff_section_header(".compat", compat_offset, PECOFF_COMPAT_RESERVE); @@ -214,21 +202,10 @@ static void update_pecoff_setup_and_relo #endif } -static int reserve_pecoff_reloc_section(int c) -{ - /* Reserve 0x20 bytes for .reloc section */ - memset(buf+c, 0, PECOFF_RELOC_RESERVE); - return PECOFF_RELOC_RESERVE; -} - #else -static inline void update_pecoff_setup_and_reloc(unsigned int size) {} +static inline void update_pecoff_setup(unsigned int size) {} -static inline int reserve_pecoff_reloc_section(int c) -{ - return 0; -} #endif /* CONFIG_EFI_STUB */ static int reserve_pecoff_compat_section(int c) @@ -307,7 +284,6 @@ int main(int argc, char ** argv) fclose(file); c += reserve_pecoff_compat_section(c); - c += reserve_pecoff_reloc_section(c); /* Pad unused space with zeros */ setup_sectors = (c + 511) / 512; @@ -316,7 +292,7 @@ int main(int argc, char ** argv) i = setup_sectors*512; memset(buf+c, 0, i-c); - update_pecoff_setup_and_reloc(i); + update_pecoff_setup(i); /* Open and stat the kernel file */ fd = open(argv[2], O_RDONLY); Patches currently in stable-queue which might be from kroah.com@xxxxxxxxxxxxxxx are queue-6.1/x86-boot-drop-pe-coff-.reloc-section.patch queue-6.1/x86-sme-move-early-sme-kernel-encryption-handling-into-.head.text.patch queue-6.1/x86-boot-omit-compression-buffer-from-pe-coff-image-memory-footprint.patch queue-6.1/x86-mm-remove-p-d_page_mask-and-p-d_page_size-macros.patch queue-6.1/x86-efi-drop-alignment-flags-from-pe-section-headers.patch queue-6.1/x86-boot-increase-section-and-file-alignment-to-4k-512.patch queue-6.1/x86-head-64-add-missing-__head-annotation-to-startup_64_load_idt.patch queue-6.1/x86-boot-define-setup-size-in-linker-script.patch queue-6.1/x86-boot-split-off-pe-coff-.data-section.patch queue-6.1/x86-boot-derive-file-size-from-_edata-symbol.patch queue-6.1/x86-boot-construct-pe-coff-.text-section-from-assembler.patch queue-6.1/x86-boot-grab-kernel_info-offset-from-zoffset-header-directly.patch queue-6.1/x86-sev-move-early-startup-code-into-.head.text-section.patch queue-6.1/x86-boot-remove-the-bugger-off-message.patch queue-6.1/x86-head-64-move-the-__head-definition-to-asm-init.h.patch queue-6.1/x86-boot-drop-references-to-startup_64.patch queue-6.1/x86-efistub-use-1-1-file-memory-mapping-for-pe-coff-.compat-section.patch queue-6.1/x86-efi-drop-efi-stub-.bss-from-.data-section.patch queue-6.1/x86-efi-disregard-setup-header-of-loaded-image.patch queue-6.1/x86-efistub-remap-kernel-text-read-only-before-dropping-nx-attribute.patch queue-6.1/x86-efistub-reinstate-soft-limit-for-initrd-loading.patch queue-6.1/x86-boot-set-efi-handover-offset-directly-in-header-asm.patch queue-6.1/x86-boot-drop-redundant-code-setting-the-root-device.patch