aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArd Biesheuvel <[email protected]>2020-03-08 09:08:52 +0100
committerIngo Molnar <[email protected]>2020-03-08 09:58:23 +0100
commit57648adb317c6f05d80a813130f8b88cecf1facf (patch)
tree7524247dc648934cc3e98774ab933fc10de21d8f
parentdd09fad9d2caad2325a39b766ce9e79cfc690184 (diff)
efi/x86: Preserve %ebx correctly in efi_set_virtual_address_map()
Commit: 59f2a619a2db8611 ("efi: Add 'runtime' pointer to struct efi") modified the assembler routine called by efi_set_virtual_address_map(), to grab the 'runtime' EFI service pointer while running with paging disabled (which is tricky to do in C code) After the change, register %ebx is not restored correctly, resulting in all kinds of weird behavior, so fix that. Reported-by: Guenter Roeck <[email protected]> Tested-by: Guenter Roeck <[email protected]> Signed-off-by: Ard Biesheuvel <[email protected]> Signed-off-by: Ingo Molnar <[email protected]> Link: https://lore.kernel.org/r/[email protected] Link: https://lore.kernel.org/r/[email protected]
-rw-r--r--arch/x86/platform/efi/efi_stub_32.S2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/platform/efi/efi_stub_32.S b/arch/x86/platform/efi/efi_stub_32.S
index 09237236fb25..09ec84f6ef51 100644
--- a/arch/x86/platform/efi/efi_stub_32.S
+++ b/arch/x86/platform/efi/efi_stub_32.S
@@ -54,7 +54,7 @@ SYM_FUNC_START(efi_call_svam)
orl $0x80000000, %edx
movl %edx, %cr0
- pop %ebx
+ movl 16(%esp), %ebx
leave
ret
SYM_FUNC_END(efi_call_svam)