]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
x86/vmscape: Warn when STIBP is disabled with SMT
authorPawan Gupta <pawan.kumar.gupta@linux.intel.com>
Thu, 14 Aug 2025 17:20:43 +0000 (10:20 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 Sep 2025 15:21:46 +0000 (17:21 +0200)
Commit b7cc9887231526ca4fa89f3fa4119e47c2dc7b1e upstream.

Cross-thread attacks are generally harder as they require the victim to be
co-located on a core. However, with VMSCAPE the adversary targets belong to
the same guest execution, that are more likely to get co-located. In
particular, a thread that is currently executing userspace hypervisor
(after the IBPB) may still be targeted by a guest execution from a sibling
thread.

Issue a warning about the potential risk, except when:

- SMT is disabled
- STIBP is enabled system-wide
- Intel eIBRS is enabled (which implies STIBP protection)

Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/kernel/cpu/bugs.c

index 9e956614f9517a37f7a517c4a2e4457de6dcbfcd..06bbc297c26c0371c2f5a0c906751d5b20a4e4bc 100644 (file)
@@ -2951,6 +2951,8 @@ static void __init vmscape_select_mitigation(void)
 #undef pr_fmt
 #define pr_fmt(fmt) fmt
 
+#define VMSCAPE_MSG_SMT "VMSCAPE: SMT on, STIBP is required for full protection. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/vmscape.html for more details.\n"
+
 void cpu_bugs_smt_update(void)
 {
        mutex_lock(&spec_ctrl_mutex);
@@ -3022,6 +3024,28 @@ void cpu_bugs_smt_update(void)
                break;
        }
 
+       switch (vmscape_mitigation) {
+       case VMSCAPE_MITIGATION_NONE:
+       case VMSCAPE_MITIGATION_AUTO:
+               break;
+       case VMSCAPE_MITIGATION_IBPB_ON_VMEXIT:
+       case VMSCAPE_MITIGATION_IBPB_EXIT_TO_USER:
+               /*
+                * Hypervisors can be attacked across-threads, warn for SMT when
+                * STIBP is not already enabled system-wide.
+                *
+                * Intel eIBRS (!AUTOIBRS) implies STIBP on.
+                */
+               if (!sched_smt_active() ||
+                   spectre_v2_user_stibp == SPECTRE_V2_USER_STRICT ||
+                   spectre_v2_user_stibp == SPECTRE_V2_USER_STRICT_PREFERRED ||
+                   (spectre_v2_in_eibrs_mode(spectre_v2_enabled) &&
+                    !boot_cpu_has(X86_FEATURE_AUTOIBRS)))
+                       break;
+               pr_warn_once(VMSCAPE_MSG_SMT);
+               break;
+       }
+
        mutex_unlock(&spec_ctrl_mutex);
 }