Cloudanix VulnDB

CVE-2025-38169

None

CVSS

—

EPSS

0.2%

Published

Jul 3, 2025

CISA due date

—

Cloudanix analysis

Schedule a fix SSVC: Track

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

  1. Obtain local execution on SME-capable ARM64 Linux system
  2. Schedule threads to force fpsimd_thread_switch() while CPU is in streaming SVE mode
  3. Trigger fpsimd_load_kernel_state() followed by SMSTOP-induced register reset
  4. 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