drivers/pci/controller/pci-xgene.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)
xgene_pcie_probe() takes a reference to the port's device node with
of_node_get(), but returns directly from the error paths of
xgene_pcie_map_reg(), xgene_pcie_init_port(), xgene_pcie_setup() and
pci_host_probe(), leaking that reference on each of them.
Add an err_put_node label that drops the reference before returning.
Fixes: 5f6b6ccdbe1c ("PCI: xgene: Add APM X-Gene PCIe driver")
Cc: stable@vger.kernel.org
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
---
drivers/pci/controller/pci-xgene.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/drivers/pci/controller/pci-xgene.c b/drivers/pci/controller/pci-xgene.c
index b95afa35201d..6b00ec60ede6 100644
--- a/drivers/pci/controller/pci-xgene.c
+++ b/drivers/pci/controller/pci-xgene.c
@@ -633,20 +633,28 @@ static int xgene_pcie_probe(struct platform_device *pdev)
ret = xgene_pcie_map_reg(port, pdev);
if (ret)
- return ret;
+ goto err_put_node;
ret = xgene_pcie_init_port(port);
if (ret)
- return ret;
+ goto err_put_node;
ret = xgene_pcie_setup(port);
if (ret)
- return ret;
+ goto err_put_node;
bridge->sysdata = port;
bridge->ops = &xgene_pcie_ops;
- return pci_host_probe(bridge);
+ ret = pci_host_probe(bridge);
+ if (ret)
+ goto err_put_node;
+
+ return 0;
+
+err_put_node:
+ of_node_put(port->node);
+ return ret;
}
static const struct of_device_id xgene_pcie_match_table[] = {
--
2.34.1
Hi Wentao,
kernel test robot noticed the following build errors:
[auto build test ERROR on pci/next]
[also build test ERROR on pci/for-linus linus/master v7.3-rc3 next-20260916]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Wentao-Liang/PCI-xgene-Fix-device-node-reference-leak-in-xgene_pcie_probe/20260917-132235
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git next
patch link: https://lore.kernel.org/r/20260917132235.2153154-1-vulab%40iscas.ac.cn
patch subject: [PATCH] PCI: xgene: Fix device node reference leak in xgene_pcie_probe()
config: arm64-defconfig (https://download.01.org/0day-ci/archive/20260918/202609182039.WWGUVgS7-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 16.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260918/202609182039.WWGUVgS7-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202609182039.WWGUVgS7-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/pci/controller/pci-xgene.c: In function 'xgene_pcie_probe':
>> drivers/pci/controller/pci-xgene.c:646:25: error: 'struct xgene_pcie' has no member named 'node'
646 | of_node_put(port->node);
| ^~
vim +646 drivers/pci/controller/pci-xgene.c
603
604 static int xgene_pcie_probe(struct platform_device *pdev)
605 {
606 struct device *dev = &pdev->dev;
607 struct xgene_pcie *port;
608 struct pci_host_bridge *bridge;
609 int ret;
610
611 if (!xgene_check_pcie_msi_ready())
612 return dev_err_probe(&pdev->dev, -EPROBE_DEFER,
613 "MSI driver not ready\n");
614
615 bridge = devm_pci_alloc_host_bridge(dev, sizeof(*port));
616 if (!bridge)
617 return -ENOMEM;
618
619 port = pci_host_bridge_priv(bridge);
620
621 port->dev = dev;
622 port->version = XGENE_PCIE_IP_VER_1;
623
624 ret = xgene_pcie_map_reg(port, pdev);
625 if (ret)
626 goto err_put_node;
627
628 ret = xgene_pcie_init_port(port);
629 if (ret)
630 goto err_put_node;
631
632 ret = xgene_pcie_setup(port);
633 if (ret)
634 goto err_put_node;
635
636 bridge->sysdata = port;
637 bridge->ops = &xgene_pcie_ops;
638
639 ret = pci_host_probe(bridge);
640 if (ret)
641 goto err_put_node;
642
643 return 0;
644
645 err_put_node:
> 646 of_node_put(port->node);
647 return ret;
648 }
649
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Wentao,
kernel test robot noticed the following build errors:
[auto build test ERROR on pci/next]
[also build test ERROR on pci/for-linus linus/master v7.3-rc3 next-20260916]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Wentao-Liang/PCI-xgene-Fix-device-node-reference-leak-in-xgene_pcie_probe/20260917-132235
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git next
patch link: https://lore.kernel.org/r/20260917132235.2153154-1-vulab%40iscas.ac.cn
patch subject: [PATCH] PCI: xgene: Fix device node reference leak in xgene_pcie_probe()
config: riscv-randconfig-1001-20260918 (https://download.01.org/0day-ci/archive/20260918/202609181924.6ZUpd4Ww-lkp@intel.com/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project 7252edd9aa82ef1c570ff6694ef7f4763a8a5d2f)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260918/202609181924.6ZUpd4Ww-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202609181924.6ZUpd4Ww-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/pci/controller/pci-xgene.c:646:20: error: no member named 'node' in 'struct xgene_pcie'
646 | of_node_put(port->node);
| ~~~~ ^
1 error generated.
vim +646 drivers/pci/controller/pci-xgene.c
603
604 static int xgene_pcie_probe(struct platform_device *pdev)
605 {
606 struct device *dev = &pdev->dev;
607 struct xgene_pcie *port;
608 struct pci_host_bridge *bridge;
609 int ret;
610
611 if (!xgene_check_pcie_msi_ready())
612 return dev_err_probe(&pdev->dev, -EPROBE_DEFER,
613 "MSI driver not ready\n");
614
615 bridge = devm_pci_alloc_host_bridge(dev, sizeof(*port));
616 if (!bridge)
617 return -ENOMEM;
618
619 port = pci_host_bridge_priv(bridge);
620
621 port->dev = dev;
622 port->version = XGENE_PCIE_IP_VER_1;
623
624 ret = xgene_pcie_map_reg(port, pdev);
625 if (ret)
626 goto err_put_node;
627
628 ret = xgene_pcie_init_port(port);
629 if (ret)
630 goto err_put_node;
631
632 ret = xgene_pcie_setup(port);
633 if (ret)
634 goto err_put_node;
635
636 bridge->sysdata = port;
637 bridge->ops = &xgene_pcie_ops;
638
639 ret = pci_host_probe(bridge);
640 if (ret)
641 goto err_put_node;
642
643 return 0;
644
645 err_put_node:
> 646 of_node_put(port->node);
647 return ret;
648 }
649
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2026 Red Hat, Inc.