linux/arch/x86/entry
Thomas Gleixner 7930cb29fb x86/pti: Switch to kernel CR3 at early in entry_SYSCALL_compat()
commit d7732ba55c upstream.

The preparation for PTI which added CR3 switching to the entry code
misplaced the CR3 switch in entry_SYSCALL_compat().

With PTI enabled the entry code tries to access a per cpu variable after
switching to kernel GS. This fails because that variable is not mapped to
user space. This results in a double fault and in the worst case a kernel
crash.

Move the switch ahead of the access and clobber RSP which has been saved
already.

Fixes: 8a09317b89 ("x86/mm/pti: Prepare the x86/entry assembly code for entry/exit CR3 switching")
Reported-by: Lars Wendler <wendler.lars@web.de>
Reported-by: Laura Abbott <labbott@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Borislav Betkov <bp@alien8.de>
Cc: Andy Lutomirski <luto@kernel.org>,
Cc: Dave Hansen <dave.hansen@linux.intel.com>,
Cc: Peter Zijlstra <peterz@infradead.org>,
Cc: Greg KH <gregkh@linuxfoundation.org>, ,
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Cc: Juergen Gross <jgross@suse.com>
Link: https://lkml.kernel.org/r/alpine.DEB.2.20.1801031949200.1957@nanos
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2018-01-05 15:48:58 +01:00
..
syscalls x86/build: Beautify build log of syscall headers 2017-12-25 14:26:16 +01:00
vdso License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
vsyscall x86/pti: Map the vsyscall page if needed 2018-01-02 20:31:00 +01:00
calling.h x86/mm: Optimize RESTORE_CR3 2018-01-02 20:31:01 +01:00
common.c x86/syscalls: Check address limit on user-mode return 2017-07-08 14:05:32 +02:00
entry_32.S x86/entry: Rename SYSENTER_stack to CPU_ENTRY_AREA_entry_stack 2017-12-29 17:53:44 +01:00
entry_64.S x86/mm: Optimize RESTORE_CR3 2018-01-02 20:31:01 +01:00
entry_64_compat.S x86/pti: Switch to kernel CR3 at early in entry_SYSCALL_compat() 2018-01-05 15:48:58 +01:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
syscall_32.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
syscall_64.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
thunk_32.S x86: move exports to actual definitions 2016-08-07 23:47:15 -04:00
thunk_64.S x86: move exports to actual definitions 2016-08-07 23:47:15 -04:00