CVE-2025-21632: x86/fpu: Ensure shadow stack is active before "getting" registers
In the Linux kernel, the following vulnerability has been resolved:
x86/fpu: Ensure shadow stack is active before "getting" registers
The x86 shadow stack support has its own set of registers. Those registers
are XSAVE-managed, but they are "supervisor state components" which means
that userspace can not touch them with XSAVE/XRSTOR. It also means that
they are not accessible from the existing ptrace ABI for XSAVE state.
Thus, there is a new ptrace get/set interface for it.
The regset code that ptrace uses provides an ->active() handler in
addition to the get/set ones. For shadow stack this ->active() handler
verifies that shadow stack is enabled via the ARCH_SHSTK_SHSTK bit in the
thread struct. The ->active() handler is checked from some call sites of
the regset get/set handlers, but not the ptrace ones. This was not
understood when shadow stack support was put in place.
As a result, both the set/get handlers can be called with
XFEATURE_CET_USER in its init state, which would cause get_xsave_addr() to
return NULL and trigger a WARN_ON(). The ssp_set() handler luckily has an
ssp_active() check to avoid surprising the kernel with shadow stack
behavior when the kernel is not ready for it (ARCH_SHSTK_SHSTK==0). That
check just happened to avoid the warning.
But the ->get() side wasn't so lucky. It can be called with shadow stacks
disabled, triggering the warning in practice, as reported by Christina
Schimpe:
WARNING: CPU: 5 PID: 1773 at arch/x86/kernel/fpu/regset.c:198 ssp_get+0x89/0xa0
[...]
Call Trace:
<TASK>
? show_regs+0x6e/0x80
? ssp_get+0x89/0xa0
? __warn+0x91/0x150
? ssp_get+0x89/0xa0
? report_bug+0x19d/0x1b0
? handle_bug+0x46/0x80
? exc_invalid_op+0x1d/0x80
? asm_exc_invalid_op+0x1f/0x30
? __pfx_ssp_get+0x10/0x10
? ssp_get+0x89/0xa0
? ssp_get+0x52/0xa0
__regset_get+0xad/0xf0
copy_regset_to_user+0x52/0xc0
ptrace_regset+0x119/0x140
ptrace_request+0x13c/0x850
? wait_task_inactive+0x142/0x1d0
? do_syscall_64+0x6d/0x90
arch_ptrace+0x102/0x300
[...]
Ensure that shadow stacks are active in a thread before looking them up
in the XSAVE buffer. Since ARCH_SHSTK_SHSTK and user_ssp[SHSTK_EN] are
set at the same time, the active check ensures that there will be
something to find in the XSAVE buffer.
[ dhansen: changelog/subject tweaks ]
Security readout for executives and security teams
Plain-English summary
This Linux kernel issue lets a local ptrace register query hit an unexpected kernel warning when shadow stacks are disabled. The public record shows it has been fixed upstream, but does not provide CVSS, CWE, or confirmed exploitation. Treat it as a kernel stability and hardening issue, not a proven remote compromise.
Executive priority
Handle through normal kernel patch management unless local multi-user exposure, strict uptime requirements, or panic-on-warning configurations raise operational risk. There is no cited evidence of active exploitation or remote attack impact.
Technical view
The ptrace regset get path for x86 shadow stack state did not enforce the regset active check. Calling ssp_get when XFEATURE_CET_USER was in its init state could make get_xsave_addr() return NULL and trigger WARN_ON(). The fix checks shadow stack activity before reading the XSAVE-managed state.
Likely exposure
Exposure appears limited to Linux systems running affected x86 kernels with the shadow-stack ptrace interface present. The source bundle identifies Linux kernel versions including 6.6, 6.6.72, 6.12.10, and 6.13 as affected, but version boundaries are not fully clear from the provided data.
Exploitation context
No active exploitation is cited, and KEV status is false. The described trigger is local ptrace interaction with shadow stack register state, resulting in a kernel warning. The sources do not show remote exploitability, privilege escalation, or public weaponization.
Researcher notes
The key flaw is a missing active-state guard in the ptrace get path, unlike the set path which already checked ssp_active(). Evidence supports a WARN_ON stability issue when shadow stack state is absent from XSAVE. Impact beyond warning behavior is not established in the supplied sources.
Mitigation direction
Apply vendor-provided Linux kernel updates containing the referenced stable fixes.
Prioritize hosts where local users or containers can use ptrace-like debugging interfaces.
Check distribution advisories for exact fixed package versions.
Avoid inventing compensating controls beyond vendor guidance from the available sources.
Validation and detection
Inventory x86 Linux hosts and kernel package versions.
Map running kernels against distribution advisories for CVE-2025-21632.
Confirm the referenced stable commits are included in deployed kernels.
Review kernel logs for related ssp_get or WARN_ON traces.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve · low confidence lookup
CVE-2025-21632 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
0CVSS vectors
3Timeline events
0ADP providers
4Source links
Vulnerability timeline
Timeline events are normalized from CVE metadata, CNA source timelines, ADP timelines, and KEV metadata when present.
CVE reservedCVE Program
The CVE ID was reserved by the assigning CNA.
CVE publishedCVE Program
The CVE record was published.
Jan 19, 2025, 10:17 UTC (UTC+00:00)
CVE updatedCVE Program
The CVE record metadata indicates this as the latest update time.