H. Peter Anvin (Intel) 09794f6893 x86/fred: Disallow the swapgs instruction when FRED is enabled
SWAPGS is no longer needed thus NOT allowed with FRED because FRED
transitions ensure that an operating system can _always_ operate
with its own GS base address:

  - For events that occur in ring 3, FRED event delivery swaps the GS
    base address with the IA32_KERNEL_GS_BASE MSR.

  - ERETU (the FRED transition that returns to ring 3) also swaps the
    GS base address with the IA32_KERNEL_GS_BASE MSR.

And the operating system can still setup the GS segment for a user
thread without the need of loading a user thread GS with:

  - Using LKGS, available with FRED, to modify other attributes of the
    GS segment without compromising its ability always to operate with
    its own GS base address.

  - Accessing the GS segment base address for a user thread as before
    using RDMSR or WRMSR on the IA32_KERNEL_GS_BASE MSR.

Note, LKGS loads the GS base address into the IA32_KERNEL_GS_BASE MSR
instead of the GS segment's descriptor cache. As such, the operating
system never changes its runtime GS base address.

Signed-off-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-19-xin3.li@intel.com
2024-01-31 22:01:41 +01:00
..
2024-01-18 17:25:39 -08:00
2024-01-18 15:16:57 -08:00
2024-01-19 09:10:23 -08:00
2024-01-19 13:36:15 -08:00
2024-01-19 09:10:23 -08:00
2024-01-10 18:13:44 -08:00
2024-01-19 13:30:49 -08:00
2024-01-18 15:01:28 -08:00
2024-01-17 11:27:23 -08:00
2024-01-19 09:10:23 -08:00
2024-01-18 15:01:28 -08:00
2024-01-18 15:01:28 -08:00
2024-01-21 11:04:29 -08:00
2024-01-19 09:10:23 -08:00
2024-01-20 09:24:06 -08:00
2024-01-19 08:08:53 -06:00
2024-01-18 11:37:24 -08:00
2024-01-18 15:01:28 -08:00
2024-01-18 15:16:57 -08:00