• Arvind Sankar's avatar
    efi/x86: Setup stack correctly for efi_pe_entry · 41d90b0c
    Arvind Sankar authored
    Commit
    
      17054f49 ("efi/x86: Implement mixed mode boot without the handover protocol")
    
    introduced a new entry point for the EFI stub to be booted in mixed mode
    on 32-bit firmware.
    
    When entered via efi32_pe_entry, control is first transferred to
    startup_32 to setup for the switch to long mode, and then the EFI stub
    proper is entered via efi_pe_entry. efi_pe_entry is an MS ABI function,
    and the ABI requires 32 bytes of shadow stack space to be allocated by
    the caller, as well as the stack being aligned to 8 mod 16 on entry.
    
    Allocate 40 bytes on the stack before switching to 64-bit mode when
    calling efi_pe_entry to account for this.
    
    For robustness, explicitly align boot_stack_end to 16 bytes. It is
    currently implicitly aligned since .bss is cacheline-size aligned,
    head_64.o is the first object file with a .bss section, and the heap and
    boot sizes are aligned.
    
    Fixes: 17054f49 ("efi/x86: Implement mixed mode boot without the handover protocol")
    Signed-off-by: default avatarArvind Sankar <nivedita@alum.mit.edu>
    Link: https://lore.kernel.org/r/20200617131957.2507632-1-nivedita@alum.mit.eduSigned-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    41d90b0c
head_64.S 20.1 KB