CVE-2026-90242: iommu/vt-d: Fix iopf_refcount leak on RID domain replacement

Published Sep 17, 2026
·
Updated

In the Linux kernel, the following vulnerability has been resolved:

iommu/vt-d: Fix iopfrefcount leak on RID domain replacement

inteliommuattachdevice() enables IOPF for the new domain but never disables it for the old one. deviceblocktranslation(), called at the start of the function, tears down translation but does not touch any IOPF state; blockingdomainattachdev() has to call iopffordomainremove() explicitly before invoking it for exactly this reason.

identitydomainattachdev() has the same problem. Its comment claims that no PRI handling is needed because the device has been put in the blocking state, but the blocking state and the IOPF reference count are independent of each other.

As a result, replacing a domain that has an iopfhandler with another domain at RID level leaks a reference in info->iopfrefcount. The count never drops back to zero, so iopfqueueremovedevice() is never called and iommudisablepcipri() triggers its WARNON(info->iopfrefcount) when the device is released.

The PASID paths already handle this correctly by way of iopffordomainreplace(); convert the two RID paths to do the same. Using the replace helper rather than a bare remove keeps the enable before the disable, so the reference count does not transiently reach zero and evict the device from the IOPF queue.

Affected Software

1 affected component
Linux Linux kernel

Event History

Sep 17, 2026
CVE Published
via MITRE·04:07 PM
Data Sourced
via MITRE·04:07 PM
Description

Frequently Asked Questions

1

Which systems are exposed to this issue?

The issue affects Linux kernel systems using the Intel VT-d IOMMU driver where a device's RID-level domain is replaced and the original domain has an IOPF handler. The affected paths are the RID domain replacement flows used by intel_iommu_attach_device() and identity_domain_attach_dev().

2

What conditions are required to trigger the leak?

A RID-level domain with an IOPF handler must be replaced by another domain. The old domain's IOPF state is not removed in the vulnerable paths, leaving a reference in info->iopf_refcount.

3

How could an administrator recognize that the condition has occurred?

When the affected device is released, iommu_disable_pci_pri() can trigger a WARN_ON for info->iopf_refcount. The stale nonzero reference also prevents iopf_queue_remove_device() from being called.

4

What does the fix change?

The RID-level replacement paths are changed to use iopf_for_domain_replace(), consistent with the existing PASID paths. This removes the old domain's IOPF state while enabling it for the replacement domain.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203