linux/Documentation/x86
Andy Lutomirski f55f0501cb x86/pti: Put the LDT in its own PGD if PTI is on
With PTI enabled, the LDT must be mapped in the usermode tables somewhere.
The LDT is per process, i.e. per mm.

An earlier approach mapped the LDT on context switch into a fixmap area,
but that's a big overhead and exhausted the fixmap space when NR_CPUS got
big.

Take advantage of the fact that there is an address space hole which
provides a completely unused pgd. Use this pgd to manage per-mm LDT
mappings.

This has a down side: the LDT isn't (currently) randomized, and an attack
that can write the LDT is instant root due to call gates (thanks, AMD, for
leaving call gates in AMD64 but designing them wrong so they're only useful
for exploits).  This can be mitigated by making the LDT read-only or
randomizing the mapping, either of which is strightforward on top of this
patch.

This will significantly slow down LDT users, but that shouldn't matter for
important workloads -- the LDT is only used by DOSEMU(2), Wine, and very
old libc implementations.

[ tglx: Cleaned it up. ]

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Laight <David.Laight@aculab.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Kirill A. Shutemov <kirill@shutemov.name>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2017-12-23 21:13:00 +01:00
..
i386 doc: spelling error changes 2014-05-05 15:32:05 +02:00
x86_64 x86/pti: Put the LDT in its own PGD if PTI is on 2017-12-23 21:13:00 +01:00
00-INDEX Documentation/: update 00-INDEX files 2014-02-10 16:01:40 -08:00
amd-memory-encryption.txt x86/cpu/AMD: Document AMD Secure Memory Encryption (SME) 2017-07-18 11:37:58 +02:00
boot.txt docs: fix locations of several documents that got moved 2016-10-24 08:12:35 -02:00
earlyprintk.txt doc: spelling error changes 2014-05-05 15:32:05 +02:00
entry_64.txt x86/asm/entry/64: Update path names 2015-07-02 11:08:50 +02:00
exception-tables.txt x86/mm: Expand the exception table logic to allow new handling options 2016-02-18 09:21:46 +01:00
intel_mpx.txt x86/Documentation: Fix various typos in Documentation/x86/ files 2016-07-01 10:00:10 +02:00
intel_rdt_ui.txt x86/intel_rdt: Show bitmask of shareable resource with other executing units 2017-08-01 22:41:30 +02:00
kernel-stacks Documentation/x86: Rename IRQSTACKSIZE to IRQ_STACK_SIZE 2015-08-24 11:42:41 -06:00
microcode.txt x86/microcode: Document the three loading methods 2017-07-25 11:26:24 +02:00
mtrr.txt x86/mm/mtrr: Remove kernel internal MTRR interfaces: unexport mtrr_add() and mtrr_del() 2015-08-28 10:09:28 +02:00
orc-unwinder.txt x86/unwind: Rename unwinder config options to 'CONFIG_UNWINDER_*' 2017-10-14 10:12:12 +02:00
pat.txt x86/pat: Document the PAT initialization sequence 2016-03-29 12:23:27 +02:00
protection-keys.txt x86/mm/pkeys: Fix typo in Documentation/x86/protection-keys.txt 2017-07-25 11:28:13 +02:00
tlb.txt x86/Documentation: Fix various typos in Documentation/x86/ files 2016-07-01 10:00:10 +02:00
topology.txt x86/topology: Document cpu_llc_id 2016-12-20 09:36:29 +01:00
usb-legacy-support.txt
zero-page.txt Merge branch 'linus' into WIP.x86/boot, to fix up conflicts and to pick up updates 2017-03-01 09:02:26 +01:00