arm64/fpsimd: Avoid clobbering kernel FPSIMD state with SMSTOP
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 6.9, 6.10, 6.12.34, 6.15.3
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
- Exploitation: none
- Automatable: no
- Technical impact: total
Summary
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.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: no · Technical impact: total
- Record last updated
Affected versions
- Linux Linux
From e92bee9f861b466c676f0200be3e46af7bc4ac6b · fixed in 55d52af498daea75aa03ba9b7e444c8ae495ac20; From e92bee9f861b466c676f0200be3e46af7bc4ac6b · fixed in a305821f597ec943849d3e53924adb88c61ed682; From e92bee9f861b466c676f0200be3e46af7bc4ac6b · fixed in 01098d893fa8a6edb2b56e178b798e3e6b674f02; From 6.8.12 · fixed in 6.9; From 6.9.3 · fixed in 6.10
- Linux Linux
6.10
- KernelLinux
From 6.10.0 · fixed in 6.12.34; From 6.13.0 · fixed in 6.15.3