diff --git a/drivers/firmware/efi/memattr.c b/drivers/firmware/efi/memattr.c
index 23973868e186..a983c1b63f07 100644
--- a/drivers/firmware/efi/memattr.c
+++ b/drivers/firmware/efi/memattr.c
@@ -6,7 +6,7 @@
  * published by the Free Software Foundation.
  */
 
-#define pr_fmt(fmt)	"efi: " fmt
+#define pr_fmt(fmt)	"efi: memattr: " fmt
 
 #include <linux/efi.h>
 #include <linux/init.h>
@@ -30,15 +30,20 @@ int __init efi_memattr_init(void)
 
 	tbl = early_memremap(efi.mem_attr_table, sizeof(*tbl));
 	if (!tbl) {
-		pr_err("Failed to map EFI Memory Attribute table @ 0x%lx\n",
+		pr_err("Failed to map EFI Memory Attributes table @ 0x%lx\n",
 		       efi.mem_attr_table);
 		return -ENOMEM;
 	}
 
 	if (tbl->version > 1) {
-		pr_warn("Unexpected EFI Memory Attribute table version %d\n",
+		pr_warn("Unexpected EFI Memory Attributes table version %d\n",
 			tbl->version);
-		tbl_size = 0;
+		goto unmap;
+	}
+
+	if (tbl->desc_size != efi.memmap->desc_size) {
+		pr_warn("Descriptor size different from EFI memory map %d\n",
+			tbl->desc_size);
 		goto unmap;
 	}
 
@@ -65,12 +70,12 @@ static bool entry_is_valid(const efi_memory_desc_t *in, efi_memory_desc_t *out)
 
 	if (in->type != EFI_RUNTIME_SERVICES_CODE &&
 	    in->type != EFI_RUNTIME_SERVICES_DATA) {
-		pr_warn("MEMATTR table entry type should be RuntimeServiceCode/Data\n");
+		pr_warn("Entry type should be RuntimeServiceCode/Data\n");
 		return false;
 	}
 
 	if (!(in->attribute & (EFI_MEMORY_RO | EFI_MEMORY_XP))) {
-		pr_warn("MEMATTR table entry attributes invalid: RO and XP bits both cleared\n");
+		pr_warn("Entry attributes invalid: RO and XP bits both cleared\n");
 		return false;
 	}
 
@@ -84,7 +89,7 @@ static bool entry_is_valid(const efi_memory_desc_t *in, efi_memory_desc_t *out)
 		 * not be able to tighten permissions on such regions without
 		 * affecting adjacent regions.
 		 */
-		pr_warn("MEMATTR table entry misaligned\n");
+		pr_warn("Entry address region misaligned\n");
 		return false;
 	}
 
@@ -107,22 +112,21 @@ static bool entry_is_valid(const efi_memory_desc_t *in, efi_memory_desc_t *out)
 		 * it covers the end as well.
 		 */
 		if (md_paddr + md_size < in_paddr + in_size) {
-			pr_warn("MEMATTR table entry covers multiple UEFI memory map regions\n");
+			pr_warn("Entry covers multiple EFI memory map regions\n");
 			return false;
 		}
 
 		if (md->type != in->type) {
-			pr_warn("MEMATTR table entry type deviates from UEFI memory map region type\n");
+			pr_warn("Entry type deviates from EFI memory map region type\n");
 			return false;
 		}
 
-		out->virt_addr = in_paddr +
-				 (md->virt_addr - md->phys_addr);
+		out->virt_addr = in_paddr + (md->virt_addr - md_paddr);
+
 		return true;
 	}
 
-	pr_warn("MEMATTR table entry does not having a matching entry in the memory map\n");
-
+	pr_warn("No matching entry found in the EFI memory map\n");
 	return false;
 }
 
@@ -142,15 +146,24 @@ int __init efi_memattr_apply_permissions(struct mm_struct *mm,
 	if (tbl_size <= sizeof(*tbl))
 		return 0;
 
+	/*
+	 * We need the EFI memory map to be setup so we can use it to
+	 * lookup the virtual addresses of all entries in the  of EFI
+	 * Memory Attributes table. If it isn't available, this
+	 * function should not be called.
+	 */
+	if (WARN_ON(!efi_enabled(EFI_MEMMAP)))
+		return 0;
+
 	tbl = memremap(efi.mem_attr_table, tbl_size, MEMREMAP_WB);
 	if (!tbl) {
-		pr_err("Failed to map EFI Memory Attribute table @ 0x%lx\n",
+		pr_err("Failed to map EFI Memory Attributes table @ 0x%lx\n",
 		       efi.mem_attr_table);
 		return -ENOMEM;
 	}
 
 	if (efi_enabled(EFI_DBG))
-		pr_info("Processing UEFI Memory Attributes table:\n");
+		pr_info("Processing EFI Memory Attributes table:\n");
 
 	for (i = ret = 0; ret == 0 && i < tbl->num_entries; i++) {
 		efi_memory_desc_t md;
@@ -162,7 +175,8 @@ int __init efi_memattr_apply_permissions(struct mm_struct *mm,
 				       &md);
 		size = md.num_pages << EFI_PAGE_SHIFT;
 		if (efi_enabled(EFI_DBG) || !valid)
-			pr_info("  0x%012llx-0x%012llx %s\n", md.phys_addr,
+			pr_info("%s 0x%012llx-0x%012llx %s\n",
+				valid ? "" : "!", md.phys_addr,
 				md.phys_addr + size - 1,
 				efi_md_typeattr_format(buf, sizeof(buf), &md));
 
diff --git a/include/linux/efi.h b/include/linux/efi.h
index bb404979f4bd..c80895e4e505 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -974,8 +974,8 @@ static inline void efi_fake_memmap(void) { }
  * efi_memattr_perm_setter - arch specific callback function passed into
  *                           efi_memattr_apply_permissions() that updates the
  *                           mapping permissions described by the second
- *                           argument in the page tables referrred to by the
- *                           first argument
+ *                           argument in the page tables referred to by the
+ *                           first argument.
  */
 typedef int (*efi_memattr_perm_setter)(struct mm_struct *, efi_memory_desc_t *);
 
