[PATCH] PCI: aspeed: Fix IRQ domain leak on platform_get_irq() failure

Jacky Chou jacky_chou at aspeedtech.com
Tue Mar 24 23:22:46 AEDT 2026


Hi Felix,

Thank you for your patch to help identify this issue.

> The aspeed_pcie_probe() function calls aspeed_pcie_init_irq_domain() which
> allocates pcie->intx_domain and initializes MSI. However, if
> platform_get_irq() fails afterwards, the cleanup action was not yet registered
> via devm_add_action_or_reset(), causing the IRQ domain resources to leak.
> 
> Fix this by registering the devm cleanup action immediately after
> aspeed_pcie_init_irq_domain() succeeds, before calling platform_get_irq().
> This ensures proper cleanup on any subsequent failure.
> 
> Fixes: 9aa0cb68fcc1 ("PCI: aspeed: Add ASPEED PCIe RC driver")
> Signed-off-by: Felix Gu <ustc.gu at gmail.com>
> ---
>  drivers/pci/controller/pcie-aspeed.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/pci/controller/pcie-aspeed.c
> b/drivers/pci/controller/pcie-aspeed.c
> index 3e1a39d1e648..6acfae7d026e 100644
> --- a/drivers/pci/controller/pcie-aspeed.c
> +++ b/drivers/pci/controller/pcie-aspeed.c
> @@ -1052,14 +1052,14 @@ static int aspeed_pcie_probe(struct
> platform_device *pdev)
>  	if (ret)
>  		return ret;
> 
> -	irq = platform_get_irq(pdev, 0);
> -	if (irq < 0)
> -		return irq;
> -
>  	ret = devm_add_action_or_reset(dev, aspeed_pcie_irq_domain_free,
> pcie);
>  	if (ret)
>  		return ret;
> 
> +	irq = platform_get_irq(pdev, 0);
> +	if (irq < 0)
> +		return irq;
> +
>  	ret = devm_request_irq(dev, irq, aspeed_pcie_intr_handler,
> IRQF_SHARED,
>  			       dev_name(dev), pcie);
>  	if (ret)

I have verified your patch on our platforms, AST2600 and AST2700, and it fixes this issue.

Tested-by: Jacky Chou <jacky_chou at aspeedtech.com>

Thanks,
Jacky



More information about the Linux-aspeed mailing list