CVE-2026-89454: PCI: plda: Fix IRQ domain leaks in the error paths of plda_init_interrupts()
In the Linux kernel, the following vulnerability has been resolved:
PCI: plda: Fix IRQ domain leaks in the error paths of pldainitinterrupts()
pldainitinterrupts() initializes IRQ domains and creates IRQ mapping but does not unwind them when later step fails.
If platformgetirq() or either irqcreatemapping() fails in pldainitinterrupts(), the domains are never deinitialized. If irqcreatemapping() fails, port->intxirq stays initialized.
Hence, remove the IRQ domains in the error path by calling pldapcieirqdomaindeinit().
Since pldapcieirqdomaindeinit() now disposes of the intxirq and msiirq mappings itself before removing their domains, the msiirq mapping failure path can go directly to errirqdomaindeinit instead of disposing of port->intxirq separately first.
This issue was found by automated review of sashiko-bot
[mani: commit log]
Affected Software
Event History
Frequently Asked Questions
What conditions trigger the resource leak?
The leak occurs only when plda_init_interrupts() encounters a later initialization failure after IRQ domains have been created. The described failure points are platform_get_irq() and either irq_create_mapping() call.
What resources can remain allocated after a failure?
IRQ domains are not deinitialized on the affected error paths. If irq_create_mapping() fails, the INTx IRQ mapping can also remain initialized.
How is the issue addressed?
The corrected error handling calls plda_pcie_irq_domain_deinit() to remove IRQ domains. That cleanup routine also disposes of the INTx and MSI IRQ mappings before removing their domains.