CVE-2025-38169
NoneCVSS
—
EPSS
0.2%
Published
Jul 3, 2025
CISA due date
—
Cloudanix analysis
On certain newer ARM processors, a Linux kernel bug can scramble internal math registers during task switching and cause crashes or wrong results until the system is updated.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Theoretical
- Impact
- Data Tampering
- Component
- OS kernel
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
On ARM64 systems with SME enabled, fpsimd_thread_switch() restores kernel FPSIMD state while the CPU remains in streaming SVE mode; the subsequent fpsimd_flush_cpu_state() issues SMSTOP, which resets FPSIMD/SVE/SME registers and clobbers the just-restored kernel state.
Why it matters to the business
Systems running affected Linux kernels on SME-capable ARM64 hardware may experience kernel-level floating-point state corruption, leading to application crashes, incorrect scientific or cryptographic results, or kernel instability that requires reboots or patches.
How an attack unfolds
An attacker with local code execution on an SME-enabled ARM64 system triggers repeated context switches immediately after kernel FPSIMD state restoration; the resulting register clobbering can be abused to corrupt in-kernel data structures and potentially escalate privileges or cause denial of service.
How to fix it
Update the Linux kernel to a version containing commit 55d52af498daea75aa03ba9b7e444c8ae495ac20; for sofia-sip on Mageia 8 apply package 1.12.11-10.1.mga8. Reboot after installation.
How to confirm the fix worked
Verify the running kernel contains commit 55d52af498daea75aa03ba9b7e444c8ae495ac20 or later equivalent; on SME hardware confirm no FPSIMD corruption occurs during context switches after the update.
Typical attack path
- Obtain local execution on SME-capable ARM64 Linux system
- Schedule threads to force fpsimd_thread_switch() while CPU is in streaming SVE mode
- Trigger fpsimd_load_kernel_state() followed by SMSTOP-induced register reset
- Leverage resulting kernel FPSIMD corruption for further exploitation
How to detect it
Review kernel logs for FPSIMD or SVE register corruption messages around context-switch events; examine crash dumps showing unexpected SMSTOP or streaming-mode exits on SME hardware.
What your security team should do
- Prioritize kernel updates on all ARM64 systems with SME support
- Apply the fixed commit or equivalent stable release immediately
- Test workloads that rely on kernel FPSIMD state after patching
- Monitor EPSS trend and any new exploit reports given the 481-day disclosure window
The record
In the Linux kernel, the following vulnerability has been resolved: arm64/fpsimd: Avoid clobbering kernel FPSIMD state with SMSTOP On system with SME, a thread's kernel FPSIMD state may be erroneously clobbered during a context switch immediately after that state is restored. Systems without SME are unaffected. If the CPU happens to be in streaming SVE mode before a context switch to a thread with kernel FPSIMD state, fpsimd_thread_switch() will restore the kernel FPSIMD state using fpsimd_load_kernel_state() while the CPU is still in streaming SVE mode. When fpsimd_thread_switch() subsequently calls fpsimd_flush_cpu_state(), this will execute an SMSTOP, causing an exit from streaming SVE mode. The exit from streaming SVE mode will cause the hardware to reset a number of FPSIMD/SVE/SME registers, clobbering the FPSIMD state. Fix this by calling fpsimd_flush_cpu_state() before restoring the kernel FPSIMD state.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Debian:13 | linux | 0 | No fix |
| Linux | Kernel | 6.10.0 | 6.12.34 |
| openSUSE:Leap 16.0 | dtb-aarch64 | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-64kb | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-default | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-default-base | 0 | 6.12.0-160000.6.1.160000.2.4 |
| openSUSE:Leap 16.0 | kernel-docs | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-kvmsmall | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-obs-build | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-obs-qa | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-rt | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-source | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-syms | 0 | 6.12.0-160000.6.1 |
| openSUSE:Leap 16.0 | kernel-zfcpdump | 0 | 6.12.0-160000.6.1 |
Related vulnerabilities
- CVE-2025-39885 In the Linux kernel, the following vulnerability has been resolved: ocfs2: fix recursive… Also affects linux
- CVE-2025-39883 In the Linux kernel, the following vulnerability has been resolved: mm/memory-failure… Also affects linux
- CVE-2025-39884 In the Linux kernel, the following vulnerability has been resolved: btrfs: fix subvolume… Also affects linux
- CVE-2025-39886 In the Linux kernel, the following vulnerability has been resolved: bpf: Tell memcg to… Also affects linux
- CVE-2025-39876 In the Linux kernel, the following vulnerability has been resolved: net: fec: Fix… Also affects linux
- CVE-2025-39880 In the Linux kernel, the following vulnerability has been resolved: libceph: fix invalid… Also affects linux
- CVE-2025-39881 In the Linux kernel, the following vulnerability has been resolved: kernfs: Fix UAF in… Also affects linux
- CVE-2025-39882 In the Linux kernel, the following vulnerability has been resolved: drm/mediatek: fix… Also affects linux