iommu/iommufd: Fix IOPF group ownership UAF
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 6.12.114, 6.18.44, 7.1.8
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
- Exploitation: none
- Automatable: no
- Technical impact: total
Summary
In the Linux kernel, the following vulnerability has been resolved: iommu/iommufd: Fix IOPF group ownership UAF iopf_group_alloc() links each last-page IOPF group into the generic IOPF pending list before invoking the domain fault handler. iommufd_fault_iopf_handler() also queued an accepted group in the IOMMUFD deliver list without removing it from the generic pending list. When detach or HWPT replacement drops the device's IOPF reference count to zero, an IOMMU driver may call iopf_queue_remove_device(). That function responds to and frees groups through the generic pending list without removing the same groups from IOMMUFD's deliver list or response xarray. A later read, response, or cleanup can then access the freed group and cause a UAF. Fix this by dequeuing an accepted group from the generic pending list before IOMMUFD queues it for userspace response. Make iopf_group_response() send a response regardless of pending-list membership, so the dequeued group can still be completed by IOMMUFD.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: no · Technical impact: total
- Record last updated
Affected versions
- Linux Linux
From 34765cbc679c59ea5d952d738d2d16bf4aadc497 · fixed in 8563099bc4b03e1894a983a394225d69b05d9277; From 34765cbc679c59ea5d952d738d2d16bf4aadc497 · fixed in 6da8f37419dd4c456f26fc203f04e000186f4b3d; From 34765cbc679c59ea5d952d738d2d16bf4aadc497 · fixed in 4e74a369236424114b94cf6a9f5ff9e848b430b4; From 34765cbc679c59ea5d952d738d2d16bf4aadc497 · fixed in 738e6f32e61d80b554e37015ecb7bc620b88001c
- Linux Linux
6.11
- KernelLinux
From 6.11.0 · fixed in 6.12.114; From 6.13.0 · fixed in 6.18.44; From 6.19.0 · fixed in 7.1.8