HIGH Introduced in 6.15
iommu MsiPage Race
CVE-2026-90244
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
KernelScan AI8.1HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: iommu/dma: Restore locking around msi_page_list Unlike a group's default domain, which is always freshly allocated and privately owned (iommu_group_alloc_default_domain()), VFIO type1's legacy container merges any newly attached group into an existing domain whenever their iommu_ops and cache-coherency enforcement match. iommu_dma_get_msi_page() only asserts the caller's own group mutex is held (iommu_group_mutex_assert()). On an IOMMU that publishes IOMMU_RESV_SW_MSI, e.g. ARM SMMU, a VM with two such devices assigned through the legacy container can have their guest drivers probe and allocate MSIs in parallel; each host-side VFIO_DEVICE_SET_IRQS lands on a different device fd and group mutex, but both devices' domains are the same merged domain, so both can enter iommu_dma_get_msi_page() concurrently and corrupt msi_page_list. commit 288683c92b1a ("iommu: Make iommu_dma_prepare_msi() into a generic operation") dropped the prior msi_prepare_lock on the reasoning that "each iommu_domain is unique to a group," which holds for default domains but not this VFIO type1 case. Restore the static lock, since it's only guarding a corner case and will likely never be contended. iommufd avoids the equivalent problem by having its own callers (iommufd_sw_map_msi()) take a ctx-wide sw_msi_lock before ever reaching the shared list. VFIO type1 can't mirror that since it dispatches to iommu_dma_sw_msi() which is outside VFIO's jurisdiction.
02KernelScan AI Analysis
Risk summary
A guest VM with two or more devices assigned through VFIO type1's legacy container on hardware with software MSI support (e.g., ARM SMMU) can trigger a race condition in the host kernel's IOMMU DMA layer, corrupting a shared MSI page linked list. This can lead to host kernel memory corruption, potentially enabling VM escape. Exploitation requires specific hardware, the legacy VFIO type1 container (not iommufd), and concurrent MSI allocation from multiple assigned devices.
Vulnerability analysis
When VFIO type1's legacy container merges multiple device groups into a single IOMMU domain, the per-group lock that was assumed to protect the domain's MSI page list does not actually block concurrent access from different groups sharing that merged domain. Two devices in the same domain can have their guest drivers allocate interrupts simultaneously, each entering the MSI page setup path through a different group lock, corrupting the shared linked list. The fix restores a global lock inside the MSI page allocation path so that all callers are serialized regardless of how many groups share a domain, closing the race window. This is reachable from a guest VM that has two or more devices assigned through VFIO type1 on an IOMMU that publishes software MSI reservations (such as ARM SMMU); the guest triggers the race through normal driver interrupt allocation and requires no special privileges on the host.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 7.2 | 6.15 | 7.2.6 | 2af1e99ec14d |
| mainline | 6.15 | 7.3-rc1 | 5a9e89ea34e0 |
| 6.18 | 6.15 | 6.18.52 | e3c53e9173a4 |