CVE-2026-90426 in Linuxinfo

Summary

by MITRE • 09/17/2026

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

iommu/tegra241-cmdqv: Free the error IRQ before tearing down VINTFs

tegra241_cmdqv_remove() tears each VINTF down first, then calls free_irq(). Tearing a VINTF down frees vintf0 and clears cmdqv->vintfs[0]. An error in
that window makes tegra241_cmdqv_isr() read the stale slot and hand it to tegra241_vintf0_handle_error(), which dereferences a NULL or freed pointer.

Free the IRQ before tearing the VINTFs down. free_irq() waits for in-flight handlers to finish and blocks new ones, so no ISR can observe a VINTF as it is torn down.

Note: a user-owned VINTF (viommu) could outlive this teardown, which unmaps cmdqv->base and frees cmdqv->vintfs, so a later viommu close then touches freed memory. This is neither introduced nor fixed here: a physical IOMMU is not a pluggable device, so iommufd by design holds no reference on the one behind a viommu, and this teardown is not expected while that viommu is still alive.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Analysis

by VulDB Data Team • 09/17/2026

The vulnerability identified in the Linux kernel's Tegra241 IOMMU driver involves a critical race condition during device removal operations, specifically within the tegra241_cmdqv_remove function. This flaw arises from an incorrect sequence of resource teardown steps where virtual interrupt interfaces are dismantled before their associated hardware interrupts are freed. In this specific implementation, the driver first tears down each VINTF, which results in freeing the vintf0 structure and clearing the corresponding entry in the cmdqv->vintfs array. However, the free_irq call, which is responsible for releasing the interrupt handler resources, occurs only after these structures have already been deallocated or nullified. This ordering creates a dangerous window of vulnerability where an asynchronous event can trigger code paths that rely on data structures no longer valid in memory.

The operational impact of this flaw manifests as a use-after-free condition triggered by hardware interrupts occurring during the teardown process. If an error interrupt is raised while the VINTF is being torn down, the interrupt service routine tegra241_cmdqv_isr may execute before free_irq has fully completed its synchronization tasks. Consequently, the ISR reads from the stale slot in cmdqv->vintfs which now points to freed memory or NULL. This leads to a dereference of an invalid pointer when passing control to tegra241_vintf0_handle_error. Such access violations typically result in kernel panics, system crashes, or potential privilege escalation if an attacker can manipulate the timing and state of these interrupts to execute arbitrary code within the kernel context.

From a classification perspective, this vulnerability aligns with CWE-416 Use After Free, as it involves accessing memory after it has been freed due to improper resource management sequencing. It also relates to CWE-362 Concurrent Execution using Shared Resource with Improper Synchronization because the race condition depends on the interaction between the removal thread and asynchronous interrupt handlers without adequate locking or ordering guarantees. In terms of ATT&CK mapping, this scenario reflects techniques associated with Defense Evasion through exploitation of system resource management flaws, potentially leading to Denial of Service via kernel instability. The lack of proper synchronization allows an attacker who can influence hardware events or timing to exploit the gap between structural deallocation and interrupt handler detachment.

The resolution for this issue involves reordering the teardown sequence within tegra241_cmdqv_remove to ensure that free_irq is called before tearing down the VINTFs. By invoking free_irq first, the kernel ensures that all in-flight interrupt handlers complete their execution and no new interrupts are scheduled or delivered while the driver structures remain intact. This synchronization mechanism effectively eliminates the race window because the ISR cannot observe a VINTF being torn down if the interrupt line itself has already been disabled and drained. This approach guarantees memory safety during device removal by maintaining valid pointers until all potential access points have been securely closed.

It is important to note that this fix addresses only one aspect of resource lifecycle management within the driver. A separate issue exists regarding user-owned VINTFs, specifically those managed via viommu, which can outlive the teardown process for the physical IOMMU. In such cases, closing a viommu instance may attempt to access cmdqv->base or cmdqv->vintfs after they have been unmapped and freed by the driver removal routine. This secondary vulnerability is not addressed in this patch because it stems from architectural design choices where iommufd does not hold references on physical IOMMUs behind viommu instances, and such teardowns are not expected while a user-owned VINTF remains active. Mitigation for that specific issue requires broader changes to reference counting or lifecycle management policies within the virtualization layer rather than simple ordering fixes in the driver removal path.

Responsible

Linux

Reservation

09/11/2026

Disclosure

09/17/2026

Moderation

accepted

CPE

ready

EPSS

0.00000

KEV

no

Activities

very low

Sources

Interested in the pricing of exploits?

See the underground prices here!