From: Tony Luck <tony.l...@intel.com>

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: Tony Luck <tony.l...@intel.com>
Signed-off-by: Chang S. Bae <chang.seok....@intel.com>
Cc: Thomas Gleixner <t...@linutronix.de>
Cc: Borislav Petkov <b...@alien8.de>
Cc: Andy Lutomirski <l...@kernel.org>
Cc: H. Peter Anvin <h...@zytor.com>
Cc: Dave Hansen <dave.han...@intel.com>
Cc: Tony Luck <tony.l...@intel.com>
Cc: Andi Kleen <a...@linux.intel.com>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 arch/x86/kernel/cpu/bugs.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
index ed54b3b21c39..487603ea51cd 100644
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -450,14 +450,12 @@ static void __init spectre_v1_select_mitigation(void)
                 * If FSGSBASE is enabled, the user can put a kernel address in
                 * 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
                 * address in GS.  That makes an attack harder, but still
                 * 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
                         * PTI as the CR3 write in the Meltdown mitigation
-- 
2.25.1

Reply via email to