aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Roedel <jroedel@suse.de>2018-07-18 05:41:10 -0400
committerThomas Gleixner <tglx@linutronix.de>2018-07-19 19:11:47 -0400
commitf3e48e546c42e31c0c095a6f917a4ad64668608c (patch)
tree5ed5144860b68fe87711807046922aa1ce0d6f47
parentf59dbe9ca6707eb7ffd0e24359085651c2d7df48 (diff)
x86/ldt: Reserve address-space range on 32 bit for the LDT
Reserve 2MB/4MB of address-space for mapping the LDT to user-space on 32 bit PTI kernels. Signed-off-by: Joerg Roedel <jroedel@suse.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Pavel Machek <pavel@ucw.cz> Cc: "H . Peter Anvin" <hpa@zytor.com> Cc: linux-mm@kvack.org Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Andy Lutomirski <luto@kernel.org> Cc: Dave Hansen <dave.hansen@intel.com> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Juergen Gross <jgross@suse.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Jiri Kosina <jkosina@suse.cz> Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com> Cc: Brian Gerst <brgerst@gmail.com> Cc: David Laight <David.Laight@aculab.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: Eduardo Valentin <eduval@amazon.com> Cc: Greg KH <gregkh@linuxfoundation.org> Cc: Will Deacon <will.deacon@arm.com> Cc: aliguori@amazon.com Cc: daniel.gruss@iaik.tugraz.at Cc: hughd@google.com Cc: keescook@google.com Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Waiman Long <llong@redhat.com> Cc: "David H . Gutteridge" <dhgutteridge@sympatico.ca> Cc: joro@8bytes.org Link: https://lkml.kernel.org/r/1531906876-13451-34-git-send-email-joro@8bytes.org
-rw-r--r--arch/x86/include/asm/pgtable_32_types.h7
-rw-r--r--arch/x86/mm/dump_pagetables.c9
2 files changed, 14 insertions, 2 deletions
diff --git a/arch/x86/include/asm/pgtable_32_types.h b/arch/x86/include/asm/pgtable_32_types.h
index d9a001a4a872..7297810747cf 100644
--- a/arch/x86/include/asm/pgtable_32_types.h
+++ b/arch/x86/include/asm/pgtable_32_types.h
@@ -50,13 +50,16 @@ extern bool __vmalloc_start_set; /* set once high_memory is set */
50 ((FIXADDR_TOT_START - PAGE_SIZE * (CPU_ENTRY_AREA_PAGES + 1)) \ 50 ((FIXADDR_TOT_START - PAGE_SIZE * (CPU_ENTRY_AREA_PAGES + 1)) \
51 & PMD_MASK) 51 & PMD_MASK)
52 52
53#define PKMAP_BASE \ 53#define LDT_BASE_ADDR \
54 ((CPU_ENTRY_AREA_BASE - PAGE_SIZE) & PMD_MASK) 54 ((CPU_ENTRY_AREA_BASE - PAGE_SIZE) & PMD_MASK)
55 55
56#define PKMAP_BASE \
57 ((LDT_BASE_ADDR - PAGE_SIZE) & PMD_MASK)
58
56#ifdef CONFIG_HIGHMEM 59#ifdef CONFIG_HIGHMEM
57# define VMALLOC_END (PKMAP_BASE - 2 * PAGE_SIZE) 60# define VMALLOC_END (PKMAP_BASE - 2 * PAGE_SIZE)
58#else 61#else
59# define VMALLOC_END (CPU_ENTRY_AREA_BASE - 2 * PAGE_SIZE) 62# define VMALLOC_END (LDT_BASE_ADDR - 2 * PAGE_SIZE)
60#endif 63#endif
61 64
62#define MODULES_VADDR VMALLOC_START 65#define MODULES_VADDR VMALLOC_START
diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
index e6fd0cdef9ad..ccd92c4da57c 100644
--- a/arch/x86/mm/dump_pagetables.c
+++ b/arch/x86/mm/dump_pagetables.c
@@ -123,6 +123,9 @@ enum address_markers_idx {
123#ifdef CONFIG_HIGHMEM 123#ifdef CONFIG_HIGHMEM
124 PKMAP_BASE_NR, 124 PKMAP_BASE_NR,
125#endif 125#endif
126#ifdef CONFIG_MODIFY_LDT_SYSCALL
127 LDT_NR,
128#endif
126 CPU_ENTRY_AREA_NR, 129 CPU_ENTRY_AREA_NR,
127 FIXADDR_START_NR, 130 FIXADDR_START_NR,
128 END_OF_SPACE_NR, 131 END_OF_SPACE_NR,
@@ -136,6 +139,9 @@ static struct addr_marker address_markers[] = {
136#ifdef CONFIG_HIGHMEM 139#ifdef CONFIG_HIGHMEM
137 [PKMAP_BASE_NR] = { 0UL, "Persistent kmap() Area" }, 140 [PKMAP_BASE_NR] = { 0UL, "Persistent kmap() Area" },
138#endif 141#endif
142#ifdef CONFIG_MODIFY_LDT_SYSCALL
143 [LDT_NR] = { 0UL, "LDT remap" },
144#endif
139 [CPU_ENTRY_AREA_NR] = { 0UL, "CPU entry area" }, 145 [CPU_ENTRY_AREA_NR] = { 0UL, "CPU entry area" },
140 [FIXADDR_START_NR] = { 0UL, "Fixmap area" }, 146 [FIXADDR_START_NR] = { 0UL, "Fixmap area" },
141 [END_OF_SPACE_NR] = { -1, NULL } 147 [END_OF_SPACE_NR] = { -1, NULL }
@@ -609,6 +615,9 @@ static int __init pt_dump_init(void)
609# endif 615# endif
610 address_markers[FIXADDR_START_NR].start_address = FIXADDR_START; 616 address_markers[FIXADDR_START_NR].start_address = FIXADDR_START;
611 address_markers[CPU_ENTRY_AREA_NR].start_address = CPU_ENTRY_AREA_BASE; 617 address_markers[CPU_ENTRY_AREA_NR].start_address = CPU_ENTRY_AREA_BASE;
618# ifdef CONFIG_MODIFY_LDT_SYSCALL
619 address_markers[LDT_NR].start_address = LDT_BASE_ADDR;
620# endif
612#endif 621#endif
613 return 0; 622 return 0;
614} 623}