36 lines
1.4 KiB
Diff
36 lines
1.4 KiB
Diff
From 4b367720588ea97a32dc6393ac8975d6111ba72b Mon Sep 17 00:00:00 2001
|
|
From: Josh Boyer <jwboyer@redhat.com>
|
|
Date: Wed, 24 Apr 2013 10:30:02 -0400
|
|
Subject: [PATCH] efi: Check EFI revision in setup_efi_vars
|
|
|
|
We need to check the runtime sys_table for the EFI version the firmware
|
|
specifies instead of just checking for a NULL QueryVariableInfo. Older
|
|
implementations of EFI don't have QueryVariableInfo but the runtime is
|
|
a smaller structure, so the pointer to it may be pointing off into garbage.
|
|
|
|
This is apparently the case with several Apple firmwares that support EFI
|
|
1.10, and the current check causes them to no longer boot. Fix based on
|
|
a suggestion from Matthew Garrett.
|
|
|
|
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
|
|
---
|
|
arch/x86/boot/compressed/eboot.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
|
|
index 8615f75..4060c8d 100644
|
|
--- a/arch/x86/boot/compressed/eboot.c
|
|
+++ b/arch/x86/boot/compressed/eboot.c
|
|
@@ -258,7 +258,7 @@ static efi_status_t setup_efi_vars(struct boot_params *params)
|
|
u64 store_size, remaining_size, var_size;
|
|
efi_status_t status;
|
|
|
|
- if (!sys_table->runtime->query_variable_info)
|
|
+ if (sys_table->runtime->hdr.revision < EFI_2_00_SYSTEM_TABLE_REVISION)
|
|
return EFI_UNSUPPORTED;
|
|
|
|
data = (struct setup_data *)(unsigned long)params->hdr.setup_data;
|
|
--
|
|
1.8.1.4
|
|
|