x86/entry/32: Fix FIXUP_ESPFIX_STACK with user CR3
authorAndy Lutomirski <luto@kernel.org>
Sun, 24 Nov 2019 16:50:03 +0000 (08:50 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 29 Nov 2019 09:10:00 +0000 (10:10 +0100)
commit95443fc0d77695e011fb4c6a326183dea40b4d6f
tree9b5dfd0b550ef8665af57579350a518926bfaea3
parentcd923d2b574ab48659e2c6aa12677a7600f4ab03
x86/entry/32: Fix FIXUP_ESPFIX_STACK with user CR3

commit 4a13b0e3e10996b9aa0b45a764ecfe49f6fcd360 upstream.

UNWIND_ESPFIX_STACK needs to read the GDT, and the GDT mapping that
can be accessed via %fs is not mapped in the user pagetables.  Use
SGDT to find the cpu_entry_area mapping and read the espfix offset
from that instead.

Reported-and-tested-by: Borislav Petkov <bp@alien8.de>
Signed-off-by: Andy Lutomirski <luto@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/entry/entry_32.S