[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAMj1kXHOqMM5uGxLTYuEf9KrxY5WzYvwo847JzoB-Qa2SN67Sg@mail.gmail.com>
Date: Thu, 20 Feb 2025 12:29:30 +0100
From: Ard Biesheuvel <ardb@...nel.org>
To: Borislav Petkov <bp@...en8.de>, Ingo Molnar <mingo@...nel.org>
Cc: linux-efi@...r.kernel.org, linux-kernel@...r.kernel.org, x86@...nel.org,
hdegoede@...hat.com
Subject: Re: [PATCH v2 0/7] x86/efi/mixed: Decouple from legacy decompressor
On Mon, 10 Feb 2025 at 18:50, Ard Biesheuvel <ardb+git@...gle.com> wrote:
>
> From: Ard Biesheuvel <ardb@...nel.org>
>
> Since commit
>
> a1b87d54f4e4 ("x86/efistub: Avoid legacy decompressor when doing EFI boot")
>
> booting via the EFI stub no longer relies on the legacy decompressor,
> and instead, the kernel proper is decompressed by code executing in the
> context of the EFI boot services, and subsequently invoked directly.
>
> The only remaining dependency is the EFI mixed mode startup code, which
> makes a detour via the legacy decompressor's 32-bit entrypoint, in order
> to obtain a 1:1 mapping of memory, which is a prerequisite for 64-bit
> execution on x86.
>
> This detour requires some fiddly setup on the part of the mixed mode
> startup code, which has to stash the firmware stack pointer and boot
> arguments in memory, and create a fake struct boot_params to trick the
> code in startup_32 to behave as intended.
>
> This dependency also impedes reuse of the EFI stub code in other
> contexts, such as generic EFI zboot, which will reuse the EFI stub but
> not the legacy decompressor.
>
> So remove this dependency, by replacing this detour with a minimal
> reimplementation of the 1:1 mapping code. With some further cleanup
> applied on top, the line count drops substantially, but without loss of
> functionality. The resulting code can operate independently from the
> legacy decompressor, and is therefore moved out of arch/x86/boot/ and
> into the EFI libstub/ directory.
>
> Changes since v1 [0]:
> - Create new long mode GDT that extends the firmware's 32-bit only GDT
> so that preserving/restoring data segment selectors or swapping out
> GDTs and IDTs is no longer needed at all.
> - Rebase onto v6.14-rc1
>
> [0] https://lore.kernel.org/all/20250108182218.1453754-8-ardb+git@google.com/
>
> Ard Biesheuvel (7):
> x86/efistub: Merge PE and handover entrypoints
> x86/efi/mixed: Check CPU compatibility without relying on verify_cpu()
> x86/efi/mixed: Factor out and clean up long mode entry
> x86/efi/mixed: Set up 1:1 mapping of lower 4GiB in the stub
> x86/efi/mixed: Remove dependency on legacy startup_32 code
> x86/efi/mixed: Simplify and document thunking logic
> x86/efi/mixed: Move mixed mode startup code into libstub
>
Unless anyone minds, I'd like to queue this up in the EFI tree.
Boris, Ingo?
Powered by blists - more mailing lists