Commit 978e1342 authored by Tony Luck's avatar Tony Luck Committed by Thomas Gleixner

x86/speculation/swapgs: Check FSGSBASE in enabling SWAPGS mitigation

Before enabling FSGSBASE the kernel could safely assume that the content
of GS base was a user address. Thus any speculative access as the result
of a mispredicted branch controlling the execution of SWAPGS would be to
a user address. So systems with speculation-proof SMAP did not need to
add additional LFENCE instructions to mitigate.

With FSGSBASE enabled a hostile user can set GS base to a kernel address.
So they can make the kernel speculatively access data they wish to leak
via a side channel. This means that SMAP provides no protection.

Add FSGSBASE as an additional condition to enable the fence-based SWAPGS
mitigation.
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
Signed-off-by: default avatarChang S. Bae <chang.seok.bae@intel.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: https://lkml.kernel.org/r/20200528201402.1708239-9-sashal@kernel.org
parent 005f141e
...@@ -543,14 +543,12 @@ static void __init spectre_v1_select_mitigation(void) ...@@ -543,14 +543,12 @@ static void __init spectre_v1_select_mitigation(void)
* If FSGSBASE is enabled, the user can put a kernel address in * If FSGSBASE is enabled, the user can put a kernel address in
* GS, in which case SMAP provides no protection. * GS, in which case SMAP provides no protection.
* *
* [ NOTE: Don't check for X86_FEATURE_FSGSBASE until the
* FSGSBASE enablement patches have been merged. ]
*
* If FSGSBASE is disabled, the user can only put a user space * If FSGSBASE is disabled, the user can only put a user space
* address in GS. That makes an attack harder, but still * address in GS. That makes an attack harder, but still
* possible if there's no SMAP protection. * possible if there's no SMAP protection.
*/ */
if (!smap_works_speculatively()) { if (boot_cpu_has(X86_FEATURE_FSGSBASE) ||
!smap_works_speculatively()) {
/* /*
* Mitigation can be provided from SWAPGS itself or * Mitigation can be provided from SWAPGS itself or
* PTI as the CR3 write in the Meltdown mitigation * PTI as the CR3 write in the Meltdown mitigation
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment