x86/entry/64: Add entry code for #VC handler
authorJoerg Roedel <jroedel@suse.de>
Mon, 7 Sep 2020 13:15:46 +0000 (15:15 +0200)
committerBorislav Petkov <bp@suse.de>
Wed, 9 Sep 2020 09:33:19 +0000 (11:33 +0200)
commita13644f3a53de4e95a7bce6459f834e832ea44c5
tree9c5cb65710578399714129dd0482ee18e7ae1238
parent6b27edd74a5e9669120f7bd0ae1f475d124c1042
x86/entry/64: Add entry code for #VC handler

The #VC handler needs special entry code because:

1. It runs on an IST stack

2. It needs to be able to handle nested #VC exceptions

To make this work, the entry code is implemented to pretend it doesn't
use an IST stack. When entered from user-mode or early SYSCALL entry
path it switches to the task stack. If entered from kernel-mode it tries
to switch back to the previous stack in the IRET frame.

The stack found in the IRET frame is validated first, and if it is not
safe to use it for the #VC handler, the code will switch to a
fall-back stack (the #VC2 IST stack). From there, it can cause nested
exceptions again.

Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lkml.kernel.org/r/20200907131613.12703-46-joro@8bytes.org
arch/x86/entry/entry_64.S
arch/x86/include/asm/idtentry.h
arch/x86/include/asm/proto.h
arch/x86/include/asm/traps.h
arch/x86/kernel/traps.c