From: Sasha Levin <sashal@kernel.org>
To: patches@lists.linux.dev, stable@vger.kernel.org
Cc: David Kaplan <david.kaplan@amd.com>,
"Borislav Petkov (AMD)" <bp@alien8.de>,
Sasha Levin <sashal@kernel.org>,
tglx@linutronix.de, peterz@infradead.org, jpoimboe@kernel.org
Subject: [PATCH AUTOSEL 6.17] x86/bugs: Add attack vector controls for VMSCAPE
Date: Mon, 6 Oct 2025 14:17:38 -0400 [thread overview]
Message-ID: <20251006181835.1919496-6-sashal@kernel.org> (raw)
In-Reply-To: <20251006181835.1919496-1-sashal@kernel.org>
From: David Kaplan <david.kaplan@amd.com>
[ Upstream commit 5799d5d8a6c877f03ad5b5a640977053be45059a ]
Use attack vector controls to select whether VMSCAPE requires mitigation,
similar to other bugs.
Signed-off-by: David Kaplan <david.kaplan@amd.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
LLM Generated explanations, may be completely bogus:
## YES
This commit should be backported to stable kernel trees.
### Comprehensive Analysis:
#### Background Context:
**VMSCAPE (CVE-2025-40300)** is a recently disclosed Spectre-based
vulnerability discovered by ETH Zurich researchers that exploits
insufficient branch predictor isolation between guest VMs and userspace
hypervisors like QEMU. It affects AMD Zen 1-5 and Intel Coffee Lake
CPUs, allowing guests to leak arbitrary memory from the hypervisor at
~32 bytes/second with 98.7% accuracy.
The vulnerability was introduced with its mitigation (conditional IBPB
on VM-exit) in upstream commit 2f8f173413f1, and has been backported to
stable trees as evidenced by commit d83e6111337f3 in
arch/x86/kernel/cpu/bugs.c:3307-3315.
#### What This Commit Does:
**Code Changes Analysis:**
1. **In should_mitigate_vuln() (arch/x86/kernel/cpu/bugs.c:417+):**
- Adds case for `X86_BUG_VMSCAPE` that returns true when
`CPU_MITIGATE_GUEST_HOST` attack vector is enabled
- This integrates VMSCAPE into the unified attack vector control
framework
2. **In vmscape_select_mitigation()
(arch/x86/kernel/cpu/bugs.c:3307-3316):**
- **Removes** the `cpu_mitigations_off()` check from line 3307
- **Replaces** unconditional AUTO→IBPB_EXIT_TO_USER assignment with
conditional logic:
```c
if (vmscape_mitigation == VMSCAPE_MITIGATION_AUTO) {
if (should_mitigate_vuln(X86_BUG_VMSCAPE))
vmscape_mitigation = VMSCAPE_MITIGATION_IBPB_EXIT_TO_USER;
else
vmscape_mitigation = VMSCAPE_MITIGATION_NONE;
}
```
3. **Documentation update:** Adds VMSCAPE to the attack vector controls
table showing Guest-to-Host (X) as the relevant attack vector
#### Behavioral Changes:
**Before this commit:**
- VMSCAPE mitigation disabled if: `cpu_mitigations_off()` OR no VMSCAPE
bug OR no IBPB support
- Otherwise in AUTO mode: **Always enables** IBPB_EXIT_TO_USER
mitigation
**After this commit:**
- VMSCAPE mitigation disabled if: no VMSCAPE bug OR no IBPB support
- In AUTO mode: Enables mitigation **only if** CPU_MITIGATE_GUEST_HOST
attack vector is enabled
- Respects attack vector controls like
`mitigations=auto,guest_to_host=off`
This change allows users to disable VMSCAPE mitigation via attack vector
controls (e.g., `mitigations=auto,guest_to_host=off`) instead of
requiring the global `mitigations=off`, providing **more granular
security control**.
#### Why This Should Be Backported:
1. **Completes Security Infrastructure:** VMSCAPE was already backported
to stable (commit d83e6111337f3), but without attack vector control
integration. This creates an **inconsistency** where all other
vulnerabilities (Spectre_v2, Retbleed, L1TF, ITS, SRSO, SSB, etc.)
use attack vector controls while VMSCAPE still uses the deprecated
`cpu_mitigations_off()` approach.
2. **Small, Self-Contained Change:** Only 15 lines changed across 2
files, with all dependencies already present in stable:
- Attack vector framework: Already in stable (commits 2d31d2874663c
and later)
- VMSCAPE bug definition: Already in stable (X86_BUG_VMSCAPE)
- should_mitigate_vuln() function: Already in stable
3. **Part of Coordinated Refactoring:** This is followed by commit
440d20154add2 "x86/bugs: Remove uses of cpu_mitigations_off()" which
removes the now-obsolete `cpu_mitigations_off()` checks. Without this
commit, VMSCAPE would be the **only** vulnerability still using the
old approach.
4. **Security Control Improvement:** Enables proper Guest-to-Host attack
vector control for CVE-2025-40300, allowing cloud providers to make
informed risk decisions rather than requiring all-or-nothing
mitigation choices.
5. **No Regression Risk:** The change is confined to the VMSCAPE
mitigation path. Default behavior remains secure (mitigation enabled
in AUTO mode with default attack vector settings). Users who
explicitly disabled mitigations will see consistent behavior across
all vulnerabilities.
6. **Follows Stable Tree Criteria:**
- ✅ Fixes important functional issue (inconsistent mitigation
control)
- ✅ Small and obviously correct
- ✅ No major architectural changes
- ✅ Security infrastructure improvement
- ✅ Already selected by AUTOSEL (commit c853b338b012a in linux-
autosel-6.17)
7. **Merged for 6.18:** The commit was merged via tag
`x86_bugs_for_v6.18_rc1` (commit d7ec0cf1cd79a), indicating it's part
of the stable security infrastructure for upcoming releases.
#### Dependencies Met:
All prerequisites are already in stable trees:
- ✅ Attack vector control framework (2d31d2874663c and subsequent
commits)
- ✅ VMSCAPE vulnerability enumeration (d83e6111337f3)
- ✅ VMSCAPE mitigation infrastructure (510603f504796)
- ✅ cpu_attack_vector_mitigated() helper functions
**Recommendation: YES** - Backport to stable kernels that have VMSCAPE
mitigation (6.17+) to complete the attack vector control integration and
maintain consistency with other CPU vulnerability mitigations.
.../admin-guide/hw-vuln/attack_vector_controls.rst | 1 +
arch/x86/kernel/cpu/bugs.c | 14 ++++++++++----
2 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/Documentation/admin-guide/hw-vuln/attack_vector_controls.rst b/Documentation/admin-guide/hw-vuln/attack_vector_controls.rst
index 5964901d66e31..d0bdbd81dcf9f 100644
--- a/Documentation/admin-guide/hw-vuln/attack_vector_controls.rst
+++ b/Documentation/admin-guide/hw-vuln/attack_vector_controls.rst
@@ -218,6 +218,7 @@ SRSO X X X X
SSB X
TAA X X X X * (Note 2)
TSA X X X X
+VMSCAPE X
=============== ============== ============ ============= ============== ============ ========
Notes:
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
index 36dcfc5105be9..e817bbae01591 100644
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -434,6 +434,9 @@ static bool __init should_mitigate_vuln(unsigned int bug)
case X86_BUG_SPEC_STORE_BYPASS:
return cpu_attack_vector_mitigated(CPU_MITIGATE_USER_USER);
+ case X86_BUG_VMSCAPE:
+ return cpu_attack_vector_mitigated(CPU_MITIGATE_GUEST_HOST);
+
default:
WARN(1, "Unknown bug %x\n", bug);
return false;
@@ -3304,15 +3307,18 @@ early_param("vmscape", vmscape_parse_cmdline);
static void __init vmscape_select_mitigation(void)
{
- if (cpu_mitigations_off() ||
- !boot_cpu_has_bug(X86_BUG_VMSCAPE) ||
+ if (!boot_cpu_has_bug(X86_BUG_VMSCAPE) ||
!boot_cpu_has(X86_FEATURE_IBPB)) {
vmscape_mitigation = VMSCAPE_MITIGATION_NONE;
return;
}
- if (vmscape_mitigation == VMSCAPE_MITIGATION_AUTO)
- vmscape_mitigation = VMSCAPE_MITIGATION_IBPB_EXIT_TO_USER;
+ if (vmscape_mitigation == VMSCAPE_MITIGATION_AUTO) {
+ if (should_mitigate_vuln(X86_BUG_VMSCAPE))
+ vmscape_mitigation = VMSCAPE_MITIGATION_IBPB_EXIT_TO_USER;
+ else
+ vmscape_mitigation = VMSCAPE_MITIGATION_NONE;
+ }
}
static void __init vmscape_update_mitigation(void)
--
2.51.0
next prev parent reply other threads:[~2025-10-06 18:19 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-06 18:17 [PATCH AUTOSEL 6.17-5.4] x86/build: Remove cc-option from stack alignment flags Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.1] btrfs: zoned: refine extent allocator hint selection Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.1] arch: Add the macro COMPILE_OFFSETS to all the asm-offsets.c Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.12] btrfs: abort transaction on specific error places when walking log tree Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-5.4] btrfs: use smp_mb__after_atomic() when forcing COW in create_pending_snapshot() Sasha Levin
2025-10-06 18:17 ` Sasha Levin [this message]
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.16] sched_ext: Keep bypass on between enable failure and scx_disable_workfn() Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.12] perf/x86/intel: Add ICL_FIXED_0_ADAPTIVE bit into INTEL_FIXED_BITS_MASK Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.12] btrfs: abort transaction if we fail to update inode in log replay dir fixup Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.1] EDAC/mc_sysfs: Increase legacy channel support to 16 Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.12] btrfs: abort transaction in the process_one_buffer() log tree walk callback Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.6] btrfs: zoned: return error from btrfs_zone_finish_endio() Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.6] perf: Skip user unwind if the task is a kernel thread Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.1] perf: Have get_perf_callchain() return NULL if crosstask and user are set Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.16] EDAC: Fix wrong executable file modes for C source files Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.6] perf: Use current->flags & PF_KTHREAD|PF_USER_WORKER instead of current->mm == NULL Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.6] btrfs: use level argument in log tree walk callback replay_one_buffer() Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.12] sched_ext: Make qmap dump operation non-destructive Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.12] seccomp: passthrough uprobe systemcall without filtering Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.12] cpuset: Use new excpus for nocpu error check when enabling root partition Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.12] btrfs: tree-checker: add inode extref checks Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17] sched/fair: update_cfs_group() for throttled cfs_rqs Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-5.15] btrfs: scrub: replace max_t()/min_t() with clamp() in scrub_throttle_dev_io() Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-5.4] x86/bugs: Fix reporting of LFENCE retpoline Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-5.10] btrfs: always drop log root tree reference in btrfs_replay_log() Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17-6.6] audit: record fanotify event regardless of presence of rules Sasha Levin
2025-10-06 18:17 ` [PATCH AUTOSEL 6.17] EDAC/ie31200: Add two more Intel Alder Lake-S SoCs for EDAC support Sasha Levin
2025-10-06 18:18 ` [PATCH AUTOSEL 6.17-6.6] x86/bugs: Report correct retbleed mitigation status Sasha Levin
2025-10-06 21:55 ` [PATCH AUTOSEL 6.17-5.4] x86/build: Remove cc-option from stack alignment flags Nathan Chancellor
2025-10-06 23:13 ` Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251006181835.1919496-6-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=bp@alien8.de \
--cc=david.kaplan@amd.com \
--cc=jpoimboe@kernel.org \
--cc=patches@lists.linux.dev \
--cc=peterz@infradead.org \
--cc=stable@vger.kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).