• Ard Biesheuvel's avatar
    x86/decompressor: Avoid magic offsets for EFI handover entrypoint · 12792064
    Ard Biesheuvel authored
    The native 32-bit or 64-bit EFI handover protocol entrypoint offset
    relative to the respective startup_32/64 address is described in
    boot_params as handover_offset, so that the special Linux/x86 aware EFI
    loader can find it there.
    
    When mixed mode is enabled, this single field has to describe this
    offset for both the 32-bit and 64-bit entrypoints, so their respective
    relative offsets have to be identical. Given that startup_32 and
    startup_64 are 0x200 bytes apart, and the EFI handover entrypoint
    resides at a fixed offset, the 32-bit and 64-bit versions of those
    entrypoints must be exactly 0x200 bytes apart as well.
    
    Currently, hard-coded fixed offsets are used to ensure this, but it is
    sufficient to emit the 64-bit entrypoint 0x200 bytes after the 32-bit
    one, wherever it happens to reside. This allows this code (which is now
    EFI mixed mode specific) to be moved into efi_mixed.S and out of the
    startup code in head_64.S.
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/r/20230807162720.545787-6-ardb@kernel.org
    12792064
head_64.S 18.9 KB