aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathias Krause <minipli@googlemail.com>2014-09-21 11:26:54 -0400
committerMatt Fleming <matt.fleming@intel.com>2014-11-11 17:28:57 -0500
commit8266e31ed0fedb7ee16ebc86e80468f7cc1bbb4e (patch)
tree3480821bd0141e5a9e5ef7ca6ab4cfcd54f0ed53
parent243b6754cd17112bbf0724ed3c13446b48cf6a28 (diff)
x86, ptdump: Add section for EFI runtime services
In commit 3891a04aafd6 ("x86-64, espfix: Don't leak bits 31:16 of %esp returning..") the "ESPFix Area" was added to the page table dump special sections. That area, though, has a limited amount of entries printed. The EFI runtime services are, unfortunately, located in-between the espfix area and the high kernel memory mapping. Due to the enforced limitation for the espfix area, the EFI mappings won't be printed in the page table dump. To make the ESP runtime service mappings visible again, provide them a dedicated entry. Signed-off-by: Mathias Krause <minipli@googlemail.com> Acked-by: Borislav Petkov <bp@suse.de> Cc: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Matt Fleming <matt.fleming@intel.com>
-rw-r--r--arch/x86/include/asm/pgtable_64_types.h2
-rw-r--r--arch/x86/mm/dump_pagetables.c3
-rw-r--r--arch/x86/platform/efi/efi_64.c3
3 files changed, 6 insertions, 2 deletions
diff --git a/arch/x86/include/asm/pgtable_64_types.h b/arch/x86/include/asm/pgtable_64_types.h
index 7166e25ecb57..602b6028c5b6 100644
--- a/arch/x86/include/asm/pgtable_64_types.h
+++ b/arch/x86/include/asm/pgtable_64_types.h
@@ -63,6 +63,8 @@ typedef struct { pteval_t pte; } pte_t;
63#define MODULES_LEN (MODULES_END - MODULES_VADDR) 63#define MODULES_LEN (MODULES_END - MODULES_VADDR)
64#define ESPFIX_PGD_ENTRY _AC(-2, UL) 64#define ESPFIX_PGD_ENTRY _AC(-2, UL)
65#define ESPFIX_BASE_ADDR (ESPFIX_PGD_ENTRY << PGDIR_SHIFT) 65#define ESPFIX_BASE_ADDR (ESPFIX_PGD_ENTRY << PGDIR_SHIFT)
66#define EFI_VA_START ( -4 * (_AC(1, UL) << 30))
67#define EFI_VA_END (-68 * (_AC(1, UL) << 30))
66 68
67#define EARLY_DYNAMIC_PAGE_TABLES 64 69#define EARLY_DYNAMIC_PAGE_TABLES 64
68 70
diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
index 95a427e57887..1a8053d1012e 100644
--- a/arch/x86/mm/dump_pagetables.c
+++ b/arch/x86/mm/dump_pagetables.c
@@ -76,6 +76,9 @@ static struct addr_marker address_markers[] = {
76# ifdef CONFIG_X86_ESPFIX64 76# ifdef CONFIG_X86_ESPFIX64
77 { ESPFIX_BASE_ADDR, "ESPfix Area", 16 }, 77 { ESPFIX_BASE_ADDR, "ESPfix Area", 16 },
78# endif 78# endif
79# ifdef CONFIG_EFI
80 { EFI_VA_END, "EFI Runtime Services" },
81# endif
79 { __START_KERNEL_map, "High Kernel Mapping" }, 82 { __START_KERNEL_map, "High Kernel Mapping" },
80 { MODULES_VADDR, "Modules" }, 83 { MODULES_VADDR, "Modules" },
81 { MODULES_END, "End Modules" }, 84 { MODULES_END, "End Modules" },
diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
index 35aecb6042fb..17e80d829df0 100644
--- a/arch/x86/platform/efi/efi_64.c
+++ b/arch/x86/platform/efi/efi_64.c
@@ -48,8 +48,7 @@ static unsigned long efi_flags __initdata;
48 * We allocate runtime services regions bottom-up, starting from -4G, i.e. 48 * We allocate runtime services regions bottom-up, starting from -4G, i.e.
49 * 0xffff_ffff_0000_0000 and limit EFI VA mapping space to 64G. 49 * 0xffff_ffff_0000_0000 and limit EFI VA mapping space to 64G.
50 */ 50 */
51static u64 efi_va = -4 * (1UL << 30); 51static u64 efi_va = EFI_VA_START;
52#define EFI_VA_END (-68 * (1UL << 30))
53 52
54/* 53/*
55 * Scratch space used for switching the pagetable in the EFI stub 54 * Scratch space used for switching the pagetable in the EFI stub