Commit 234fa51d authored by Ard Biesheuvel's avatar Ard Biesheuvel

efi: Drop minimum EFI version check at boot

We currently pass a minimum major version to the generic EFI helper that
checks the system table magic and version, and refuse to boot if the
value is lower.

The motivation for this check is unknown, and even the code that uses
major version 2 as the minimum (ARM, arm64 and RISC-V) should make it
past this check without problems, and boot to a point where we have
access to a console or some other means to inform the user that the
firmware's major revision number made us unhappy. (Revision 2.0 of the
UEFI specification was released in January 2006, whereas ARM, arm64 and
RISC-V support where added in 2009, 2013 and 2017, respectively, so
checking for major version 2 or higher is completely arbitrary)

So just drop the check.
Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
parent ace013a5
...@@ -525,7 +525,7 @@ efi_init (void) ...@@ -525,7 +525,7 @@ efi_init (void)
*/ */
if (efi_systab == NULL) if (efi_systab == NULL)
panic("Whoa! Can't find EFI system table.\n"); panic("Whoa! Can't find EFI system table.\n");
if (efi_systab_check_header(&efi_systab->hdr, 1)) if (efi_systab_check_header(&efi_systab->hdr))
panic("Whoa! EFI system table signature incorrect\n"); panic("Whoa! EFI system table signature incorrect\n");
efi_systab_report_header(&efi_systab->hdr, efi_systab->fw_vendor); efi_systab_report_header(&efi_systab->hdr, efi_systab->fw_vendor);
......
...@@ -380,7 +380,7 @@ static int __init efi_systab_init(unsigned long phys) ...@@ -380,7 +380,7 @@ static int __init efi_systab_init(unsigned long phys)
return -ENOMEM; return -ENOMEM;
} }
ret = efi_systab_check_header(hdr, 1); ret = efi_systab_check_header(hdr);
if (ret) { if (ret) {
early_memunmap(p, size); early_memunmap(p, size);
return ret; return ret;
......
...@@ -92,7 +92,7 @@ static int __init uefi_init(u64 efi_system_table) ...@@ -92,7 +92,7 @@ static int __init uefi_init(u64 efi_system_table)
if (IS_ENABLED(CONFIG_64BIT)) if (IS_ENABLED(CONFIG_64BIT))
set_bit(EFI_64BIT, &efi.flags); set_bit(EFI_64BIT, &efi.flags);
retval = efi_systab_check_header(&systab->hdr, 2); retval = efi_systab_check_header(&systab->hdr);
if (retval) if (retval)
goto out; goto out;
......
...@@ -759,20 +759,13 @@ int __init efi_config_parse_tables(const efi_config_table_t *config_tables, ...@@ -759,20 +759,13 @@ int __init efi_config_parse_tables(const efi_config_table_t *config_tables,
return 0; return 0;
} }
int __init efi_systab_check_header(const efi_table_hdr_t *systab_hdr, int __init efi_systab_check_header(const efi_table_hdr_t *systab_hdr)
int min_major_version)
{ {
if (systab_hdr->signature != EFI_SYSTEM_TABLE_SIGNATURE) { if (systab_hdr->signature != EFI_SYSTEM_TABLE_SIGNATURE) {
pr_err("System table signature incorrect!\n"); pr_err("System table signature incorrect!\n");
return -EINVAL; return -EINVAL;
} }
if ((systab_hdr->revision >> 16) < min_major_version)
pr_err("Warning: System table version %d.%02d, expected %d.00 or greater!\n",
systab_hdr->revision >> 16,
systab_hdr->revision & 0xffff,
min_major_version);
return 0; return 0;
} }
......
...@@ -721,8 +721,7 @@ static inline void efi_esrt_init(void) { } ...@@ -721,8 +721,7 @@ static inline void efi_esrt_init(void) { }
extern int efi_config_parse_tables(const efi_config_table_t *config_tables, extern int efi_config_parse_tables(const efi_config_table_t *config_tables,
int count, int count,
const efi_config_table_type_t *arch_tables); const efi_config_table_type_t *arch_tables);
extern int efi_systab_check_header(const efi_table_hdr_t *systab_hdr, extern int efi_systab_check_header(const efi_table_hdr_t *systab_hdr);
int min_major_version);
extern void efi_systab_report_header(const efi_table_hdr_t *systab_hdr, extern void efi_systab_report_header(const efi_table_hdr_t *systab_hdr,
unsigned long fw_vendor); unsigned long fw_vendor);
extern u64 efi_get_iobase (void); extern u64 efi_get_iobase (void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment