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 00/17] x86/boot: Rework PE header generation
Date: Fri, 18 Aug 2023 15:44:05 +0200 [thread overview]
Message-ID: <20230818134422.380032-1-ardb@kernel.org> (raw)
Now that the EFI stub boot flow no longer relies on memory that is
executable and writable at the same time, we can reorganize the PE/COFF
view of the kernel image and expose the decompressor binary's code and
r/o data as a .text section and data/bss as a .data section, using 4k
alignment and limited permissions.
Doing so is necessary for compatibility with hardening measures that are
being rolled out on x86 PCs built to run Windows (i.e., the majority of
them). The EFI boot environment that the Linux EFI stub executes in is
especially sensitive to safety issues, given that a vulnerability in the
loader of one OS can be abused to attack another.
In true x86 fashion, this is more complicated than on other
architectures, which have implemented this code/data split with 4k
alignment from the beginning. The complicating factor here is that the
boot image consists of two different parts, which are stitched together
and fixed up using a special build tool.
The first three patches simplify the x86 EFI stub code so it does not
even bother reading the setup header from the image - passing arguments
this way is not supported by EFI boot anyway.
Then, the bzImage is simplified and reorganized, primarily by:
- dropping the ancient 'bugger off' message occupying much of the header
space
- using a fixed size of 16k for the setup block
- setting header values from asm instead of via the build tool
Finally, the payload is split into .text and .data, and the section and
file alignment increased to 4k/512 respectively.
The only remaining task performed by the build tool is generating the
CRC-32 that is fundamentally broken in practice and never used, so that
is dropped entirely at the end.
This supersedes the work proposed by Evgeniy last year, which did a
major rewrite of the build tool in order to clean it up, before updating
it to generate the new 4k aligned image layout. As this series proves,
the build tool is mostly unnecessary, and we have too many of those
already.
Cc: Evgeniy Baskov <baskov@ispras.ru>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Jones <pjones@redhat.com>
Cc: Matthew Garrett <mjg59@srcf.ucam.org>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Marvin Häuser <mhaeuser@posteo.de>
Ard Biesheuvel (17):
x86/efi: Drop EFI stub .bss from .data section
x86/efi: Disregard setup header of loaded image
x86/efi: Drop alignment flags from PE section headers
x86/boot: Remove the 'bugger off' message
x86/boot: Omit compression buffer from PE/COFF image memory footprint
x86/boot: Drop redundant code setting the root device
x86/boot: Grab kernel_info offset from zoffset header directly
x86/boot: Drop references to startup_64
x86/boot: Set EFI handover offset directly in header asm
x86/boot: Drop workaround for binutils 2.14 in linker script ASSERTs
x86/boot: Use fixed size of 16k for setup block
x86/boot: Derive file size from _edata symbol
x86/boot: Construct PE/COFF .text section from assembler
x86/boot: Drop PE/COFF .reloc section
x86/boot: Split off PE/COFF .data section
x86/boot: Increase section and file alignment to 4k/512
x86/boot: Drop CRC-32 checksum and the build tool that generates it
Documentation/arch/x86/boot.rst | 10 -
arch/x86/boot/Makefile | 12 +-
arch/x86/boot/compressed/vmlinux.lds.S | 5 +-
arch/x86/boot/header.S | 217 ++++-----
arch/x86/boot/setup.ld | 21 +-
arch/x86/boot/tools/.gitignore | 2 -
arch/x86/boot/tools/build.c | 502 --------------------
drivers/firmware/efi/libstub/Makefile | 7 -
drivers/firmware/efi/libstub/x86-stub.c | 46 +-
9 files changed, 113 insertions(+), 709 deletions(-)
delete mode 100644 arch/x86/boot/tools/.gitignore
delete mode 100644 arch/x86/boot/tools/build.c
--
2.39.2
next reply other threads:[~2023-08-18 13:45 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-18 13:44 Ard Biesheuvel [this message]
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 ` [PATCH 14/17] x86/boot: Drop PE/COFF .reloc section Ard Biesheuvel
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-1-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