x86/fred: Fixup fault on ERETU by jumping to fred_entrypoint_user
authorXin Li <xin3.li@intel.com>
Tue, 5 Dec 2023 10:50:18 +0000 (02:50 -0800)
committerBorislav Petkov (AMD) <bp@alien8.de>
Wed, 31 Jan 2024 21:03:04 +0000 (22:03 +0100)
commit5105e7687ad3dffde77f6e4393b5530e83d672dc
treebc3f17dae2474cf5e4b411b6e249e2c52ceef121
parent51ef2a4da7ec347e3315af69a426ac36fab98a6c
x86/fred: Fixup fault on ERETU by jumping to fred_entrypoint_user

If the stack frame contains an invalid user context (e.g. due to invalid SS,
a non-canonical RIP, etc.) the ERETU instruction will trap (#SS or #GP).

From a Linux point of view, this really should be considered a user space
failure, so use the standard fault fixup mechanism to intercept the fault,
fix up the exception frame, and redirect execution to fred_entrypoint_user.
The end result is that it appears just as if the hardware had taken the
exception immediately after completing the transition to user space.

Suggested-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Signed-off-by: Xin Li <xin3.li@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Tested-by: Shan Kang <shan.kang@intel.com>
Link: https://lore.kernel.org/r/20231205105030.8698-30-xin3.li@intel.com
arch/x86/entry/entry_64_fred.S
arch/x86/include/asm/extable_fixup_types.h
arch/x86/mm/extable.c