]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: enetc: fix device and OF node leak at probe
authorJohan Hovold <johan@kernel.org>
Fri, 25 Jul 2025 17:12:10 +0000 (19:12 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 31 Jul 2025 01:02:47 +0000 (18:02 -0700)
Make sure to drop the references to the IERB OF node and platform device
taken by of_parse_phandle() and of_find_device_by_node() during probe.

Fixes: e7d48e5fbf30 ("net: enetc: add a mini driver for the Integrated Endpoint Register Block")
Cc: stable@vger.kernel.org # 5.13
Cc: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20250725171213.880-3-johan@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/freescale/enetc/enetc_pf.c

index f63a29e2e0311dbb4eadb99ed19102f341e6b327..de0fb272c8474c67232d039eb245bf69840e21f7 100644 (file)
@@ -829,19 +829,29 @@ static int enetc_pf_register_with_ierb(struct pci_dev *pdev)
 {
        struct platform_device *ierb_pdev;
        struct device_node *ierb_node;
+       int ret;
 
        ierb_node = of_find_compatible_node(NULL, NULL,
                                            "fsl,ls1028a-enetc-ierb");
-       if (!ierb_node || !of_device_is_available(ierb_node))
+       if (!ierb_node)
                return -ENODEV;
 
+       if (!of_device_is_available(ierb_node)) {
+               of_node_put(ierb_node);
+               return -ENODEV;
+       }
+
        ierb_pdev = of_find_device_by_node(ierb_node);
        of_node_put(ierb_node);
 
        if (!ierb_pdev)
                return -EPROBE_DEFER;
 
-       return enetc_ierb_register_pf(ierb_pdev, pdev);
+       ret = enetc_ierb_register_pf(ierb_pdev, pdev);
+
+       put_device(&ierb_pdev->dev);
+
+       return ret;
 }
 
 static const struct enetc_si_ops enetc_psi_ops = {