]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
x86/efi: Drop support for the EFI_PROPERTIES_TABLE
authorNicolas Saenz Julienne <nsaenz@amazon.com>
Tue, 12 Nov 2024 18:52:16 +0000 (18:52 +0000)
committerArd Biesheuvel <ardb@kernel.org>
Fri, 15 Nov 2024 16:40:00 +0000 (17:40 +0100)
Drop support for the EFI_PROPERTIES_TABLE. It was a failed, short-lived
experiment that broke the boot both on Linux and Windows, and was
replaced by the EFI_MEMORY_ATTRIBUTES_TABLE shortly after.

Suggested-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Nicolas Saenz Julienne <nsaenz@amazon.com>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
arch/x86/platform/efi/efi.c
arch/x86/platform/efi/efi_64.c
include/linux/efi.h

index 88a96816de9a9b72403f2f2838d58e2d2ffe29a9..375ebd78296ad57b05ed287ebfcefd9f0e26c471 100644 (file)
 #include <asm/uv/uv.h>
 
 static unsigned long efi_systab_phys __initdata;
-static unsigned long prop_phys = EFI_INVALID_TABLE_ADDR;
 static unsigned long uga_phys = EFI_INVALID_TABLE_ADDR;
 static unsigned long efi_runtime, efi_nr_tables;
 
 unsigned long efi_fw_vendor, efi_config_table;
 
 static const efi_config_table_type_t arch_tables[] __initconst = {
-       {EFI_PROPERTIES_TABLE_GUID,     &prop_phys,             "PROP"          },
        {UGA_IO_PROTOCOL_GUID,          &uga_phys,              "UGA"           },
 #ifdef CONFIG_X86_UV
        {UV_SYSTEM_TABLE_GUID,          &uv_systab_phys,        "UVsystab"      },
@@ -82,7 +80,6 @@ static const unsigned long * const efi_tables[] = {
        &efi_runtime,
        &efi_config_table,
        &efi.esrt,
-       &prop_phys,
        &efi_mem_attr_table,
 #ifdef CONFIG_EFI_RCI2_TABLE
        &rci2_table_phys,
@@ -502,22 +499,6 @@ void __init efi_init(void)
                return;
        }
 
-       /* Parse the EFI Properties table if it exists */
-       if (prop_phys != EFI_INVALID_TABLE_ADDR) {
-               efi_properties_table_t *tbl;
-
-               tbl = early_memremap_ro(prop_phys, sizeof(*tbl));
-               if (tbl == NULL) {
-                       pr_err("Could not map Properties table!\n");
-               } else {
-                       if (tbl->memory_protection_attribute &
-                           EFI_PROPERTIES_RUNTIME_MEMORY_PROTECTION_NON_EXECUTABLE_PE_DATA)
-                               set_bit(EFI_NX_PE_DATA, &efi.flags);
-
-                       early_memunmap(tbl, sizeof(*tbl));
-               }
-       }
-
        set_bit(EFI_RUNTIME_SERVICES, &efi.flags);
        efi_clean_memmap();
 
index 91d31ac422d6cde7ab5434bcd02176cbcd6b07ff..ac57259a432b8c67f76590ee3050438311084a92 100644 (file)
@@ -412,51 +412,9 @@ static int __init efi_update_mem_attr(struct mm_struct *mm, efi_memory_desc_t *m
 
 void __init efi_runtime_update_mappings(void)
 {
-       efi_memory_desc_t *md;
-
-       /*
-        * Use the EFI Memory Attribute Table for mapping permissions if it
-        * exists, since it is intended to supersede EFI_PROPERTIES_TABLE.
-        */
        if (efi_enabled(EFI_MEM_ATTR)) {
                efi_disable_ibt_for_runtime = false;
                efi_memattr_apply_permissions(NULL, efi_update_mem_attr);
-               return;
-       }
-
-       /*
-        * EFI_MEMORY_ATTRIBUTES_TABLE is intended to replace
-        * EFI_PROPERTIES_TABLE. So, use EFI_PROPERTIES_TABLE to update
-        * permissions only if EFI_MEMORY_ATTRIBUTES_TABLE is not
-        * published by the firmware. Even if we find a buggy implementation of
-        * EFI_MEMORY_ATTRIBUTES_TABLE, don't fall back to
-        * EFI_PROPERTIES_TABLE, because of the same reason.
-        */
-
-       if (!efi_enabled(EFI_NX_PE_DATA))
-               return;
-
-       for_each_efi_memory_desc(md) {
-               unsigned long pf = 0;
-
-               if (!(md->attribute & EFI_MEMORY_RUNTIME))
-                       continue;
-
-               if (!(md->attribute & EFI_MEMORY_WB))
-                       pf |= _PAGE_PCD;
-
-               if ((md->attribute & EFI_MEMORY_XP) ||
-                       (md->type == EFI_RUNTIME_SERVICES_DATA))
-                       pf |= _PAGE_NX;
-
-               if (!(md->attribute & EFI_MEMORY_RO) &&
-                       (md->type != EFI_RUNTIME_SERVICES_CODE))
-                       pf |= _PAGE_RW;
-
-               if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
-                       pf |= _PAGE_ENC;
-
-               efi_update_mappings(md, pf);
        }
 }
 
index e28d8806603376c631000013bc254277fb3cbb04..e5815867aba971a64091bf0ea017d95f21115124 100644 (file)
@@ -379,7 +379,6 @@ void efi_native_runtime_setup(void);
 #define EFI_SYSTEM_RESOURCE_TABLE_GUID         EFI_GUID(0xb122a263, 0x3661, 0x4f68,  0x99, 0x29, 0x78, 0xf8, 0xb0, 0xd6, 0x21, 0x80)
 #define EFI_FILE_SYSTEM_GUID                   EFI_GUID(0x964e5b22, 0x6459, 0x11d2,  0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
 #define DEVICE_TREE_GUID                       EFI_GUID(0xb1b621d5, 0xf19c, 0x41a5,  0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0)
-#define EFI_PROPERTIES_TABLE_GUID              EFI_GUID(0x880aaca3, 0x4adc, 0x4a04,  0x90, 0x79, 0xb7, 0x47, 0x34, 0x08, 0x25, 0xe5)
 #define EFI_RNG_PROTOCOL_GUID                  EFI_GUID(0x3152bca5, 0xeade, 0x433d,  0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44)
 #define EFI_RNG_ALGORITHM_RAW                  EFI_GUID(0xe43176d7, 0xb6e8, 0x4827,  0xb7, 0x84, 0x7f, 0xfd, 0xc4, 0xb6, 0x85, 0x61)
 #define EFI_MEMORY_ATTRIBUTES_TABLE_GUID       EFI_GUID(0xdcfa911d, 0x26eb, 0x469f,  0xa2, 0x20, 0x38, 0xb7, 0xdc, 0x46, 0x12, 0x20)
@@ -580,15 +579,6 @@ struct efi_mem_range {
        u64 attribute;
 };
 
-typedef struct {
-       u32 version;
-       u32 length;
-       u64 memory_protection_attribute;
-} efi_properties_table_t;
-
-#define EFI_PROPERTIES_TABLE_VERSION   0x00010000
-#define EFI_PROPERTIES_RUNTIME_MEMORY_PROTECTION_NON_EXECUTABLE_PE_DATA        0x1
-
 typedef struct {
        u16 version;
        u16 length;
@@ -871,10 +861,9 @@ static inline int efi_range_is_wc(unsigned long start, unsigned long len)
 #define EFI_PARAVIRT           6       /* Access is via a paravirt interface */
 #define EFI_ARCH_1             7       /* First arch-specific bit */
 #define EFI_DBG                        8       /* Print additional debug info at runtime */
-#define EFI_NX_PE_DATA         9       /* Can runtime data regions be mapped non-executable? */
-#define EFI_MEM_ATTR           10      /* Did firmware publish an EFI_MEMORY_ATTRIBUTES table? */
-#define EFI_MEM_NO_SOFT_RESERVE        11      /* Is the kernel configured to ignore soft reservations? */
-#define EFI_PRESERVE_BS_REGIONS        12      /* Are EFI boot-services memory segments available? */
+#define EFI_MEM_ATTR           9       /* Did firmware publish an EFI_MEMORY_ATTRIBUTES table? */
+#define EFI_MEM_NO_SOFT_RESERVE        10      /* Is the kernel configured to ignore soft reservations? */
+#define EFI_PRESERVE_BS_REGIONS        11      /* Are EFI boot-services memory segments available? */
 
 #ifdef CONFIG_EFI
 /*