HIGH Introduced in 6.11
iommufd IOPF UAF
CVE-2026-89445
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
KernelScan AI7.0HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: iommufd: Fix UAF in selftest IOPF reporting IOMMUFD selftest TRIGGER_IOPF borrows an attach handle from group->pasid_array without synchronizing against PASID detach, then a concurrent iommu_report_device_fault() can dereference that borrowed handle's domain pointer after the detach erases the handle and frees the backing struct iommufd_attach_handle. TRIGGER_IOPF then dereferences the freed handle, causing a UAF. Fix by adding a iopf_rwsem in mock_dev to follow the expected design of a real driver. Hold its read side across the whole iommu_report_device_fault() call, and its write side around every path that attaches, detaches, or replaces a device domain. This can block new reports and drains in-flight reports before an old attach handle or the IOPF fault parameter can be removed. Also take the write side while registering a mock device, since it can invoke the mock driver's default-domain attach callback.
02KernelScan AI Analysis
Risk summary
A local attacker who can access the iommufd selftest interface can trigger a use-after-free by racing an I/O page fault report ioctl against a concurrent PASID detach, potentially corrupting kernel heap memory. The vulnerable code exists only in kernels built with the iommufd test configuration option, which is not enabled in production builds by default. Exploitation requires winning a narrow race window between two concurrent ioctl operations.
Vulnerability analysis
The iommufd selftest mock device allows a test ioctl to trigger an I/O page fault report that borrows an internal attach handle without any synchronization against concurrent PASID detach operations. If a detach runs in parallel, it can free the backing attach handle structure while the fault report is still dereferencing it, resulting in a use-after-free. The fix introduces a read-write semaphore on the mock device: the read side is held across the entire fault report call, and the write side is held around every attach, detach, replace, and device-registration path, so that in-flight fault reports drain before any handle or fault parameter is removed. This code path is only reachable when the kernel is compiled with the iommufd selftest configuration option enabled, and triggering it requires a local process with access to the iommufd device interface issuing two concurrent ioctls in a race window.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 6.12 | 6.11 | 6.12.112 | fd2e7ac94d6d |
| 6.18 | 6.11 | 6.18.50 | cab289572951 |
| 7.2 | 6.11 | 7.2.4 | e27e90bde68b |
| mainline | 6.11 | 7.3 | 8c07df7cdfcf |
| cip/6.12 | 6.11 | 6.12.112-cip33 | fd2e7ac94d6d |
04CIP Kernels
State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.
| CIP tree | State |
|---|---|
| cip/6.12 | Fixed in 6.12.112-cip33 |