|
@@ -426,6 +426,24 @@ int __init efi_config_parse_tables(void *config_tables, int count, int sz,
|
|
|
}
|
|
|
pr_cont("\n");
|
|
|
set_bit(EFI_CONFIG_TABLES, &efi.flags);
|
|
|
+
|
|
|
+ /* Parse the EFI Properties table if it exists */
|
|
|
+ if (efi.properties_table != EFI_INVALID_TABLE_ADDR) {
|
|
|
+ efi_properties_table_t *tbl;
|
|
|
+
|
|
|
+ tbl = early_memremap(efi.properties_table, sizeof(*tbl));
|
|
|
+ if (tbl == NULL) {
|
|
|
+ pr_err("Could not map Properties table!\n");
|
|
|
+ return -ENOMEM;
|
|
|
+ }
|
|
|
+
|
|
|
+ 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));
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|