OSDN Git Service

x86/ldt: Unmap PTEs for the slot before freeing LDT pages
authorKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Fri, 26 Oct 2018 12:28:55 +0000 (15:28 +0300)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 6 Nov 2018 20:35:11 +0000 (21:35 +0100)
commita0e6e0831c516860fc7f9be1db6c081fe902ebcf
tree4ab250ebf9add4debdd238e620fe15b3838db159
parentd52888aa2753e3063a9d3a0c9f72f94aa9809c15
x86/ldt: Unmap PTEs for the slot before freeing LDT pages

modify_ldt(2) leaves the old LDT mapped after switching over to the new
one. The old LDT gets freed and the pages can be re-used.

Leaving the mapping in place can have security implications. The mapping is
present in the userspace page tables and Meltdown-like attacks can read
these freed and possibly reused pages.

It's relatively simple to fix: unmap the old LDT and flush TLB before
freeing the old LDT memory.

This further allows to avoid flushing the TLB in map_ldt_struct() as the
slot is unmapped and flushed by unmap_ldt_struct() or has never been mapped
at all.

[ tglx: Massaged changelog and removed the needless line breaks ]

Fixes: f55f0501cbf6 ("x86/pti: Put the LDT in its own PGD if PTI is on")
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: bp@alien8.de
Cc: hpa@zytor.com
Cc: dave.hansen@linux.intel.com
Cc: luto@kernel.org
Cc: peterz@infradead.org
Cc: boris.ostrovsky@oracle.com
Cc: jgross@suse.com
Cc: bhe@redhat.com
Cc: willy@infradead.org
Cc: linux-mm@kvack.org
Cc: stable@vger.kernel.org
Link: https://lkml.kernel.org/r/20181026122856.66224-3-kirill.shutemov@linux.intel.com
arch/x86/kernel/ldt.c