diff options
author | Joerg Roedel <jroedel@suse.de> | 2018-07-18 05:41:10 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2018-07-19 19:11:47 -0400 |
commit | f3e48e546c42e31c0c095a6f917a4ad64668608c (patch) | |
tree | 5ed5144860b68fe87711807046922aa1ce0d6f47 | |
parent | f59dbe9ca6707eb7ffd0e24359085651c2d7df48 (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.h | 7 | ||||
-rw-r--r-- | arch/x86/mm/dump_pagetables.c | 9 |
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 | } |