// For flags

CVE-2025-22013

KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state

Severity Score

8.4
*CVSS v3

Exploit Likelihood

*EPSS

Affected Versions

*CPE

Public Exploits

0
*Multiple Sources

Exploited in Wild

-
*KEV

Decision

-
*SSVC
Descriptions

In the Linux kernel, the following vulnerability has been resolved: KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state There are several problems with the way hyp code lazily saves the host's
FPSIMD/SVE state, including: * Host SVE being discarded unexpectedly due to inconsistent configuration of TIF_SVE and CPACR_ELx.ZEN. This has been seen to result in QEMU crashes where SVE is used by memmove(), as reported by Eric Auger: https://issues.redhat.com/browse/RHEL-68997 * Host SVE state is discarded *after* modification by ptrace, which was an unintentional ptrace ABI change introduced with lazy discarding of SVE state. * The host FPMR value can be discarded when running a non-protected VM, where FPMR support is not exposed to a VM, and that VM uses FPSIMD/SVE. In these cases the hyp code does not save the host's FPMR before unbinding the host's FPSIMD/SVE/SME state, leaving a stale value in memory. Avoid these by eagerly saving and "flushing" the host's FPSIMD/SVE/SME
state when loading a vCPU such that KVM does not need to save any of the
host's FPSIMD/SVE/SME state. For clarity, fpsimd_kvm_prepare() is
removed and the necessary call to fpsimd_save_and_flush_cpu_state() is
placed in kvm_arch_vcpu_load_fp(). As 'fpsimd_state' and 'fpmr_ptr'
should not be used, they are set to NULL; all uses of these will be
removed in subsequent patches. Historical problems go back at least as far as v5.17, e.g. erroneous
assumptions about TIF_SVE being clear in commit: 8383741ab2e773a9 ("KVM: arm64: Get rid of host SVE tracking/saving") ... and so this eager save+flush probably needs to be backported to ALL
stable trees.

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: KVM: arm64: Guardar y vaciar incondicionalmente el estado FPSIMD/SVE/SME del host Hay varios problemas con la forma en que el código hyp guarda de forma diferida el estado FPSIMD/SVE del host, incluidos: * El SVE del host se descarta inesperadamente debido a una configuración inconsistente de TIF_SVE y CPACR_ELx.ZEN. Se ha visto que esto da como resultado fallos de QEMU donde memmove() usa SVE, como lo informó Eric Auger: https://issues.redhat.com/browse/RHEL-68997 * El estado SVE del host se descarta *después* de la modificación por ptrace, que fue un cambio de ABI de ptrace no intencionado introducido con el descarte diferido del estado SVE. * El valor FPMR del host se puede descartar cuando se ejecuta una VM no protegida, donde la compatibilidad con FPMR no está expuesta a una VM y esa VM usa FPSIMD/SVE. En estos casos, el código hyp no guarda el FPMR del host antes de desvincular su estado FPSIMD/SVE/SME, lo que deja un valor obsoleto en memoria. Para evitar esto, guarde y vacíe el estado FPSIMD/SVE/SME del host al cargar una vCPU, de modo que KVM no tenga que guardar ninguno de sus estados. Para mayor claridad, se ha eliminado fpsimd_kvm_prepare() y la llamada necesaria a fpsimd_save_and_flush_cpu_state() se ha ubicado en kvm_arch_vcpu_load_fp(). Dado que 'fpsimd_state' y 'fpmr_ptr' no deben usarse, se establecen en NULL; todos sus usos se eliminarán en parches posteriores. Los problemas históricos se remontan al menos a la versión v5.17, por ejemplo, suposiciones erróneas acerca de que TIF_SVE está claro en el commit: 8383741ab2e773a9 ("KVM: arm64: deshacerse del seguimiento/guardado de SVE del host")... y por eso, este ansioso guardado y vaciado probablemente deba ser retrotraído a TODOS los árboles estables.

In the Linux kernel, the following vulnerability has been resolved: KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state There are several problems with the way hyp code lazily saves the host's FPSIMD/SVE state, including: * Host SVE being discarded unexpectedly due to inconsistent configuration of TIF_SVE and CPACR_ELx.ZEN. This has been seen to result in QEMU crashes where SVE is used by memmove(), as reported by Eric Auger: https://issues.redhat.com/browse/RHEL-68997 * Host SVE state is discarded *after* modification by ptrace, which was an unintentional ptrace ABI change introduced with lazy discarding of SVE state. * The host FPMR value can be discarded when running a non-protected VM, where FPMR support is not exposed to a VM, and that VM uses FPSIMD/SVE. In these cases the hyp code does not save the host's FPMR before unbinding the host's FPSIMD/SVE/SME state, leaving a stale value in memory. Avoid these by eagerly saving and "flushing" the host's FPSIMD/SVE/SME state when loading a vCPU such that KVM does not need to save any of the host's FPSIMD/SVE/SME state. For clarity, fpsimd_kvm_prepare() is removed and the necessary call to fpsimd_save_and_flush_cpu_state() is placed in kvm_arch_vcpu_load_fp(). As 'fpsimd_state' and 'fpmr_ptr' should not be used, they are set to NULL; all uses of these will be removed in subsequent patches. Historical problems go back at least as far as v5.17, e.g. erroneous assumptions about TIF_SVE being clear in commit: 8383741ab2e773a9 ("KVM: arm64: Get rid of host SVE tracking/saving") ... and so this eager save+flush probably needs to be backported to ALL stable trees.

*Credits: N/A
CVSS Scores
Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
None
Integrity
High
Availability
High
Attack Vector
Local
Attack Complexity
Low
Authentication
None
Confidentiality
None
Integrity
Partial
Availability
None
* Common Vulnerability Scoring System
SSVC
  • Decision:-
Exploitation
-
Automatable
-
Tech. Impact
-
* Organization's Worst-case Scenario
Timeline
  • 2024-12-29 CVE Reserved
  • 2025-04-08 CVE Published
  • 2025-04-08 EPSS Updated
  • 2025-04-09 CVE Updated
  • ---------- Exploited in Wild
  • ---------- KEV Due Date
  • ---------- First Exploit
CWE
CAPEC
Affected Vendors, Products, and Versions
Vendor Product Version Other Status
Vendor Product Version Other Status <-- --> Vendor Product Version Other Status
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 6.2 < 6.6.85
Search vendor "Linux" for product "Linux Kernel" and version " >= 6.2 < 6.6.85"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 6.2 < 6.12.21
Search vendor "Linux" for product "Linux Kernel" and version " >= 6.2 < 6.12.21"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 6.2 < 6.13.9
Search vendor "Linux" for product "Linux Kernel" and version " >= 6.2 < 6.13.9"
en
Affected
Linux
Search vendor "Linux"
Linux Kernel
Search vendor "Linux" for product "Linux Kernel"
>= 6.2 < 6.14
Search vendor "Linux" for product "Linux Kernel" and version " >= 6.2 < 6.14"
en
Affected