CVE-2025-38062

genirq/msi: Store the IOMMU IOVA directly in msi_desc instead of iommu_cookie

MEDIUM
5.5
CVSS Score
Published: June 18, 2025 at 09:33 AM UTC
Updated: August 5, 2026 at 12:44 PM UTC
2 products affected across 2 vendorsLinux KernelDebian Linux

Using Linux by Linux?

Get instant alerts when new vulnerabilities affect Linux - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
MEDIUM5.5
Exploit prediction
EPSS 0.2%

Description

In the Linux kernel, the following vulnerability has been resolved: genirq/msi: Store the IOMMU IOVA directly in msi_desc instead of iommu_cookie The IOMMU translation for MSI message addresses has been a 2-step process, separated in time: 1) iommu_dma_prepare_msi(): A cookie pointer containing the IOVA address is stored in the MSI descriptor when an MSI interrupt is allocated. 2) iommu_dma_compose_msi_msg(): this cookie pointer is used to compute a translated message address. This has an inherent lifetime problem for the pointer stored in the cookie that must remain valid between the two steps. However, there is no locking at the irq layer that helps protect the lifetime. Today, this works under the assumption that the iommu domain is not changed while MSI interrupts being programmed. This is true for normal DMA API users within the kernel, as the iommu domain is attached before the driver is probed and cannot be changed while a driver is attached. Classic VFIO type1 also prevented changing the iommu domain while VFIO was running as it does not support changing the "container" after starting up. However, iommufd has improved this so that the iommu domain can be changed during VFIO operation. This potentially allows userspace to directly race VFIO_DEVICE_ATTACH_IOMMUFD_PT (which calls iommu_attach_group()) and VFIO_DEVICE_SET_IRQS (which calls into iommu_dma_compose_msi_msg()). This potentially causes both the cookie pointer and the unlocked call to iommu_get_domain_for_dev() on the MSI translation path to become UAFs. Fix the MSI cookie UAF by removing the cookie pointer. The translated IOVA address is already known during iommu_dma_prepare_msi() and cannot change. Thus, it can simply be stored as an integer in the MSI descriptor. The other UAF related to iommu_get_domain_for_dev() will be addressed in patch "iommu: Make iommu_dma_prepare_msi() into a generic operation" by using the IOMMU group mutex.

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

5.2 ≤ v < 6.1.1415.2 ≤ v < 6.12.315.2 ≤ v < 6.14.95.2 ≤ v < 6.155.2 ≤ v < 6.6.936.13 ≤ v < 6.14.96.2 ≤ v < 6.6.936.7 ≤ v < 6.12.315.2ece6e6f0218b7777e650bf93728130ae6f4feb7d
Vendor states this is fixed in 1f7df3a691740a7736bbc99dc4ed536120eb4746 (fixed)
Vendor states this is fixed in 53f42776e435f63e5f8e61955e4c205dbfeaf524 (fixed)
Vendor states this is fixed in 856152eb91e67858a09e30a7149a1f29b04b7384 (fixed)
Vendor states this is fixed in ba41e4e627db51d914444aee0b93eb67f31fa330 (fixed)
Vendor states this is fixed in e4d3763223c7b72ded53425207075e7453b4e3d5 (fixed)
Vendor states this is fixed in 5.2 (unaffected)
Vendor states this is fixed in 6.1.141 (unaffected)
Vendor states this is fixed in 6.12.31 (unaffected)
Vendor states this is fixed in 6.14.9 (unaffected)
Vendor states this is fixed in 6.15 (unaffected)
Vendor states this is fixed in 6.6.93 (unaffected)

References (6)

Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/1f7df3a691740a7736bbc99dc4ed536120eb4746
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/53f42776e435f63e5f8e61955e4c205dbfeaf524
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/856152eb91e67858a09e30a7149a1f29b04b7384
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/ba41e4e627db51d914444aee0b93eb67f31fa330
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/e4d3763223c7b72ded53425207075e7453b4e3d5
Third Party Advisory
Source: af854a3a-2127-422b-91ae-364da2661108
https://lists.debian.org/debian-lts-announce/2025/10/msg00008.html

CVSS

Attack Vector
LOCAL
Complexity
LOW
Privileges
LOW
User Interaction
NONE
Scope
UNCHANGED
Confidentiality
NONE
Integrity
NONE
Availability
HIGH
Vector?

Quick Info

StatusMODIFIED
CWE
NVD-CWE-noinfo

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card