All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ardb@google.com>
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>
Subject: [PATCH v2 10/15] x86/boot: Define setup size in linker script
Date: Tue, 12 Sep 2023 09:01:01 +0000	[thread overview]
Message-ID: <20230912090051.4014114-27-ardb@google.com> (raw)
In-Reply-To: <20230912090051.4014114-17-ardb@google.com>

From: Ard Biesheuvel <ardb@kernel.org>

The setup block contains the real mode startup code that is used when
booting from a legacy BIOS, along with the boot_params/setup_data that
is used by legacy x86 bootloaders to pass the command line and initial
ramdisk parameters, among other things.

The setup block also contains the PE/COFF header of the entire combined
image, which includes the compressed kernel image, the decompressor and
the EFI stub.

This PE header describes the layout of the executable image in memory,
and currently, the fact that the setup block precedes it makes it rather
fiddly to get the right values into the right place in the final image.

Let's make things a bit easier by defining the setup_size in the linker
script so it can be referenced from the asm code directly, rather than
having to rely on the build tool to calculate it. For the time being,
add 64 bytes of fixed padding for the .reloc and .compat sections - this
will be removed in a subsequent patch after the PE/COFF header has been
reorganized.

This change has no impact on the resulting bzImage binary when
configured with CONFIG_EFI_MIXED=y.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
 arch/x86/boot/header.S      | 2 +-
 arch/x86/boot/setup.ld      | 4 ++++
 arch/x86/boot/tools/build.c | 6 ------
 3 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
index 72744ba440f6..06bd72a324c1 100644
--- a/arch/x86/boot/header.S
+++ b/arch/x86/boot/header.S
@@ -231,7 +231,7 @@ sentinel:	.byte 0xff, 0xff        /* Used to detect broken loaders */
 
 	.globl	hdr
 hdr:
-setup_sects:	.byte 0			/* Filled in by build.c */
+		.byte setup_sects - 1
 root_flags:	.word ROOT_RDONLY
 syssize:	.long 0			/* Filled in by build.c */
 ram_size:	.word 0			/* Obsolete */
diff --git a/arch/x86/boot/setup.ld b/arch/x86/boot/setup.ld
index b11c45b9e51e..ae2b5046a0db 100644
--- a/arch/x86/boot/setup.ld
+++ b/arch/x86/boot/setup.ld
@@ -39,6 +39,10 @@ SECTIONS
 	.signature	: {
 		setup_sig = .;
 		LONG(0x5a5aaa55)
+
+		/* reserve some extra space for the reloc and compat sections */
+		setup_size = ABSOLUTE(ALIGN(. + 64, 512));
+		setup_sects = ABSOLUTE(setup_size / 512);
 	}
 
 
diff --git a/arch/x86/boot/tools/build.c b/arch/x86/boot/tools/build.c
index 069497543164..745d64b6d930 100644
--- a/arch/x86/boot/tools/build.c
+++ b/arch/x86/boot/tools/build.c
@@ -48,12 +48,7 @@ typedef unsigned int   u32;
 u8 buf[SETUP_SECT_MAX*512];
 
 #define PECOFF_RELOC_RESERVE 0x20
-
-#ifdef CONFIG_EFI_MIXED
 #define PECOFF_COMPAT_RESERVE 0x20
-#else
-#define PECOFF_COMPAT_RESERVE 0x0
-#endif
 
 static unsigned long efi_pe_entry;
 static unsigned long efi32_pe_entry;
@@ -388,7 +383,6 @@ int main(int argc, char ** argv)
 #endif
 
 	/* Patch the setup code with the appropriate size parameters */
-	buf[0x1f1] = setup_sectors-1;
 	put_unaligned_le32(sys_size, &buf[0x1f4]);
 
 	update_pecoff_text(setup_sectors * 512, i + (sys_size * 16));
-- 
2.42.0.283.g2d96d420d3-goog


  parent reply	other threads:[~2023-09-12  9:02 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-12  9:00 [PATCH v2 00/15] x86/boot: Rework PE header generation Ard Biesheuvel
2023-09-12  9:00 ` [PATCH v2 01/15] x86/efi: Drop EFI stub .bss from .data section Ard Biesheuvel
2023-09-15  9:37   ` [tip: x86/boot] " tip-bot2 for Ard Biesheuvel
2023-09-12  9:00 ` [PATCH v2 02/15] x86/efi: Disregard setup header of loaded image Ard Biesheuvel
2023-09-15  9:37   ` [tip: x86/boot] " tip-bot2 for Ard Biesheuvel
2023-09-12  9:00 ` [PATCH v2 03/15] x86/efi: Drop alignment flags from PE section headers Ard Biesheuvel
2023-09-15  9:37   ` [tip: x86/boot] " tip-bot2 for Ard Biesheuvel
2023-09-12  9:00 ` [PATCH v2 04/15] x86/boot: Remove the 'bugger off' message Ard Biesheuvel
2023-09-15  9:37   ` [tip: x86/boot] " tip-bot2 for Ard Biesheuvel
2023-09-12  9:00 ` [PATCH v2 05/15] x86/boot: Omit compression buffer from PE/COFF image memory footprint Ard Biesheuvel
2023-09-15  9:37   ` [tip: x86/boot] " tip-bot2 for Ard Biesheuvel
2023-09-12  9:00 ` [PATCH v2 06/15] x86/boot: Drop redundant code setting the root device Ard Biesheuvel
2023-09-15  9:37   ` [tip: x86/boot] " tip-bot2 for Ard Biesheuvel
2023-09-12  9:00 ` [PATCH v2 07/15] x86/boot: Grab kernel_info offset from zoffset header directly Ard Biesheuvel
2023-09-12  9:00 ` [PATCH v2 08/15] x86/boot: Drop references to startup_64 Ard Biesheuvel
2023-09-15  9:15   ` Ingo Molnar
2023-09-15 13:48     ` Ard Biesheuvel
2023-09-15 15:40       ` Ingo Molnar
2023-09-15 15:45         ` Ingo Molnar
2023-09-15 15:48           ` Ard Biesheuvel
2023-09-15  9:37   ` [tip: x86/boot] " tip-bot2 for Ard Biesheuvel
2023-09-12  9:01 ` [PATCH v2 09/15] x86/boot: Set EFI handover offset directly in header asm Ard Biesheuvel
2023-09-12  9:01 ` Ard Biesheuvel [this message]
2023-09-15  9:37   ` [tip: x86/boot] x86/boot: Define setup size in linker script tip-bot2 for Ard Biesheuvel
2023-09-12  9:01 ` [PATCH v2 11/15] x86/boot: Derive file size from _edata symbol Ard Biesheuvel
2023-09-12  9:01 ` [PATCH v2 12/15] x86/boot: Construct PE/COFF .text section from assembler Ard Biesheuvel
2023-09-12  9:01 ` [PATCH v2 13/15] x86/boot: Drop PE/COFF .reloc section Ard Biesheuvel
2023-09-12  9:01 ` [PATCH v2 14/15] x86/boot: Split off PE/COFF .data section Ard Biesheuvel
2023-09-12  9:01 ` [PATCH v2 15/15] x86/boot: Increase section and file alignment to 4k/512 Ard Biesheuvel
2023-09-15  9:22 ` [PATCH v2 00/15] x86/boot: Rework PE header generation Ingo Molnar
2023-09-15 11:30   ` Ingo Molnar
2023-09-15 13:21     ` Ard Biesheuvel
2023-09-15 13:28       ` Ard Biesheuvel
2023-09-16  9:10         ` Ingo Molnar
2023-09-16 19:14           ` Ard Biesheuvel
2023-09-17 17:50             ` Ingo Molnar
2023-10-03  2:02 ` Jan Hendrik Farr
2023-10-23 11:22   ` Ard Biesheuvel
2023-10-23 17:35     ` Jan Hendrik Farr
2023-10-24  8:21       ` Dave Young
2023-10-24  8:31         ` Dave Young

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=20230912090051.4014114-27-ardb@google.com \
    --to=ardb@google.com \
    --cc=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=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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.