Skip to content
  • Matt Fleming's avatar
    x86/efi: Truncate 64-bit values when calling 32-bit OutputString() · 115c6628
    Matt Fleming authored
    If we're executing the 32-bit efi_char16_printk() code path (i.e.
    running on top of 32-bit firmware) we know that efi_early->text_output
    will be a 32-bit value, even though ->text_output has type u64.
    
    Unfortunately, we currently pass ->text_output directly to
    efi_early->call() so for CONFIG_X86_32 the compiler will push a 64-bit
    value onto the stack, causing the other parameters to be misaligned.
    
    The way we handle this in the rest of the EFI boot stub is to pass
    pointers as arguments to efi_early->call(), which automatically do the
    right thing (pointers are 32-bit on CONFIG_X86_32, and we simply ignore
    the upper 32-bits of the argument register if running in 64-bit mode
    with 32-bit firmware).
    
    This fixes a corruption bug when printing strings from the 32-bit EFI
    boot stub.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=84241
    
    
    Signed-off-by: default avatarMatt Fleming <matt.fleming@intel.com>
    115c6628