Description (CNA)
In the Linux kernel, the following vulnerability has been resolved: iommu: Fix WARN_ON in __iommu_group_set_domain_nofail() due to reset In __iommu_group_set_domain_internal(), concurrent domain attachments are rejected when any device in the group is recovering. This is necessary to fence concurrent attachments to a multi-device group where devices might share the same RID due to PCI DMA alias quirks, but triggers the WARN_ON in __iommu_group_set_domain_nofail(). Other IOMMU_SET_DOMAIN_MUST_SUCCEED callers in detach/teardown paths, such as __iommu_group_set_core_domain and __iommu_release_dma_ownership, should not be rejected, as the domain would be freed anyway in these nofail paths while group->domain is still pointing to it. So pci_dev_reset_iommu_done() could trigger a UAF when re-attaching group->domain. Honor the IOMMU_SET_DOMAIN_MUST_SUCCEED flag, allowing the callers through the group->recovery_cnt fence, so as to update the group->domain pointer. Instead add a gdev->blocked check in the device iteration loop, to prevent any concurrent per-device detachment.
Affected (CNA)
| Vendor / product | Versions |
|---|---|
| Linux / Linux | affected c279e83953d937470f8a6e69b69f62608714f13f before 8fc289e809f3eb7e36cadc4684ab6fad747a5a93; affected c279e83953d937470f8a6e69b69f62608714f13f before 5474e6e17a262db45c60575c73f70210f5c7001f |
| Linux / Linux | affected 7.0; unaffected 0 before 7.0; unaffected 7.0.10 through 7.0.*; unaffected 7.1 through * |
CWE
No CWE identifiers supplied.
References
- https://git.kernel.org/stable/c/8fc289e809f3eb7e36cadc4684ab6fad747a5a93
- https://git.kernel.org/stable/c/5474e6e17a262db45c60575c73f70210f5c7001f
ADP enrichment
A flaw was found in the Linux kernel's Input/Output Memory Management Unit (IOMMU) subsystem, which manages how devices access system memory. A race condition, a situation where multiple operations occur in an unpredictable order, exists during device recovery when multiple memory domains are being attached concurrently. This can lead to a Use-After-Free (UAF) vulnerability, where the system attempts to use memory that has already been released, potentially allowing a local attacker to execute unauthorized code or cause the system to crash (denial of service).