efi/x86: Respect 32-bit ABI in efi32_pe_entry()
authorArvind Sankar <nivedita@alum.mit.edu>
Sun, 8 Mar 2020 08:08:41 +0000 (09:08 +0100)
committerIngo Molnar <mingo@kernel.org>
Sun, 8 Mar 2020 08:58:15 +0000 (09:58 +0100)
verify_cpu() clobbers BX and DI. In case we have to return error, we need
to preserve them to respect the 32-bit calling convention.

Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20200301230436.2246909-3-nivedita@alum.mit.edu
Link: https://lore.kernel.org/r/20200308080859.21568-11-ardb@kernel.org
arch/x86/boot/compressed/head_64.S

index 8105e8348607fe56b56d53c29a05d7ee4fbcfa67..920daf62dac2abb056728461ee158e687e260368 100644 (file)
@@ -660,7 +660,11 @@ SYM_DATA(efi_is64, .byte 1)
 SYM_FUNC_START(efi32_pe_entry)
        pushl   %ebp
 
+       pushl   %ebx
+       pushl   %edi
        call    verify_cpu                      // check for long mode support
+       popl    %edi
+       popl    %ebx
        testl   %eax, %eax
        movl    $0x80000003, %eax               // EFI_UNSUPPORTED
        jnz     3f