public inbox for linux-efi@vger.kernel.org
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ardb@kernel.org>
To: linux-efi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, "Ard Biesheuvel" <ardb@kernel.org>,
	"Evgeniy Baskov" <baskov@ispras.ru>,
	"Borislav Petkov" <bp@alien8.de>,
	"Dave Hansen" <dave.hansen@linux.intel.com>,
	"Ingo Molnar" <mingo@redhat.com>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Peter Jones" <pjones@redhat.com>,
	"Matthew Garrett" <mjg59@srcf.ucam.org>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Kees Cook" <keescook@chromium.org>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"Marvin Häuser" <mhaeuser@posteo.de>
Subject: [PATCH 14/17] x86/boot: Drop PE/COFF .reloc section
Date: Fri, 18 Aug 2023 15:44:19 +0200	[thread overview]
Message-ID: <20230818134422.380032-15-ardb@kernel.org> (raw)
In-Reply-To: <20230818134422.380032-1-ardb@kernel.org>

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@kernel.org>
---
 arch/x86/boot/header.S      | 20 -----------
 arch/x86/boot/tools/build.c | 35 +++-----------------
 2 files changed, 5 insertions(+), 50 deletions(-)

diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
index c23c5feef37e55ed..ccfb7a7d8c29275e 100644
--- a/arch/x86/boot/header.S
+++ b/arch/x86/boot/header.S
@@ -159,26 +159,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.
diff --git a/arch/x86/boot/tools/build.c b/arch/x86/boot/tools/build.c
index 6b6282a96c6ab24d..08065c333b482174 100644
--- a/arch/x86/boot/tools/build.c
+++ b/arch/x86/boot/tools/build.c
@@ -45,8 +45,6 @@ typedef unsigned int   u32;
 /* This must be large enough to hold the entire setup */
 u8 buf[(SETUP_SECT_NUM+1)*512];
 
-#define PECOFF_RELOC_RESERVE 0x20
-
 #ifdef CONFIG_EFI_MIXED
 #define PECOFF_COMPAT_RESERVE 0x20
 #else
@@ -183,24 +181,13 @@ static void update_pecoff_section_header(char *section_name, u32 offset, u32 siz
 	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);
@@ -217,21 +204,10 @@ static void update_pecoff_setup_and_reloc(unsigned int size)
 #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)
@@ -310,7 +286,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;
@@ -320,7 +295,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);
-- 
2.39.2


  parent reply	other threads:[~2023-08-18 13:46 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-18 13:44 [PATCH 00/17] x86/boot: Rework PE header generation Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 01/17] x86/efi: Drop EFI stub .bss from .data section Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 02/17] x86/efi: Disregard setup header of loaded image Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 03/17] x86/efi: Drop alignment flags from PE section headers Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 04/17] x86/boot: Remove the 'bugger off' message Ard Biesheuvel
2023-08-20  1:02   ` H. Peter Anvin
2023-08-18 13:44 ` [PATCH 05/17] x86/boot: Omit compression buffer from PE/COFF image memory footprint Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 06/17] x86/boot: Drop redundant code setting the root device Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 07/17] x86/boot: Grab kernel_info offset from zoffset header directly Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 08/17] x86/boot: Drop references to startup_64 Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 09/17] x86/boot: Set EFI handover offset directly in header asm Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 10/17] x86/boot: Drop workaround for binutils 2.14 in linker script ASSERTs Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 11/17] x86/boot: Use fixed size of 16k for setup block Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 12/17] x86/boot: Derive file size from _edata symbol Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 13/17] x86/boot: Construct PE/COFF .text section from assembler Ard Biesheuvel
2023-08-18 13:44 ` Ard Biesheuvel [this message]
2023-08-18 13:44 ` [PATCH 15/17] x86/boot: Split off PE/COFF .data section Ard Biesheuvel
2023-08-18 14:35   ` Marvin Häuser
2023-09-07 13:44     ` Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 16/17] x86/boot: Increase section and file alignment to 4k/512 Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 17/17] x86/boot: Drop CRC-32 checksum and the build tool that generates it Ard Biesheuvel
2023-08-20  1:03   ` H. Peter Anvin
2023-08-20 12:57     ` Ard Biesheuvel
2023-08-21  0:37       ` H. Peter Anvin
2023-08-21  7:04         ` Ard Biesheuvel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230818134422.380032-15-ardb@kernel.org \
    --to=ardb@kernel.org \
    --cc=baskov@ispras.ru \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=keescook@chromium.org \
    --cc=kraxel@redhat.com \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhaeuser@posteo.de \
    --cc=mingo@redhat.com \
    --cc=mjg59@srcf.ucam.org \
    --cc=pjones@redhat.com \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox