PCI: xilinx-cpm: Fix IRQ domain leak in error path of probe
authorThippeswamy Havalige <thippeswamy.havalige@amd.com>
Mon, 24 Feb 2025 15:50:22 +0000 (21:20 +0530)
committerKrzysztof Wilczyński <kwilczynski@kernel.org>
Tue, 11 Mar 2025 14:34:36 +0000 (14:34 +0000)
The IRQ domain allocated for the PCIe controller is not freed if
resource_list_first_type() returns NULL, leading to a resource leak.

This fix ensures properly cleaning up the allocated IRQ domain in
the error path.

Fixes: 49e427e6bdd1 ("Merge branch 'pci/host-probe-refactor'")
Signed-off-by: Thippeswamy Havalige <thippeswamy.havalige@amd.com>
[kwilczynski: added missing Fixes: tag, refactored to use one of the goto labels]
Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
Link: https://lore.kernel.org/r/20250224155025.782179-2-thippeswamy.havalige@amd.com
drivers/pci/controller/pcie-xilinx-cpm.c

index 81e8bfae53d0067711702d9b06aa1dc0698aa48b..dc8ecdbee56c89c0e9c21ca11981b70c9168933b 100644 (file)
@@ -583,15 +583,17 @@ static int xilinx_cpm_pcie_probe(struct platform_device *pdev)
                return err;
 
        bus = resource_list_first_type(&bridge->windows, IORESOURCE_BUS);
-       if (!bus)
-               return -ENODEV;
+       if (!bus) {
+               err = -ENODEV;
+               goto err_free_irq_domains;
+       }
 
        port->variant = of_device_get_match_data(dev);
 
        err = xilinx_cpm_pcie_parse_dt(port, bus->res);
        if (err) {
                dev_err(dev, "Parsing DT failed\n");
-               goto err_parse_dt;
+               goto err_free_irq_domains;
        }
 
        xilinx_cpm_pcie_init_port(port);
@@ -615,7 +617,7 @@ err_host_bridge:
        xilinx_cpm_free_interrupts(port);
 err_setup_irq:
        pci_ecam_free(port->cfg);
-err_parse_dt:
+err_free_irq_domains:
        xilinx_cpm_free_irq_domains(port);
        return err;
 }