[PATCH v2] net: ethernet: ti: netcp_core: fix device_node refcount leak in netcp_probe()

manushprajwal <[email protected]>
Newsgroups org.kernel.vger.netdev
Message-ID <[email protected]>
From: Manush Prajwal <[email protected]>

When netcp_create_interface() failed for a given child node,
netcp_probe() jumped to probe_quit_interface, which released the
"interfaces" parent node but never the "child" node that the
for_each_available_child_of_node() loop was iterating on.

Rework the loop around for_each_available_child_of_node_scoped()
instead of adding a manual of_node_put(). child is only read inside
the loop body and is never used after it, so the scoped macro's
automatic cleanup on the goto is sufficient on its own.

Signed-off-by: Manush Prajwal <[email protected]>
---
v2: Rework using for_each_available_child_of_node_scoped() instead of
    a manual of_node_put(), per Andrew Lunn's review.

 drivers/net/ethernet/ti/netcp_core.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/ti/netcp_core.c b/drivers/net/ethernet/ti/netcp_core.c
index eb8fc2ed05..a888aa35fa 100644
--- a/drivers/net/ethernet/ti/netcp_core.c
+++ b/drivers/net/ethernet/ti/netcp_core.c
@@ -2204,7 +2204,7 @@ static int netcp_probe(struct platform_device *pdev)
 {
 	struct device_node *node = pdev->dev.of_node;
 	struct netcp_intf *netcp_intf, *netcp_tmp;
-	struct device_node *child, *interfaces;
+	struct device_node *interfaces;
 	struct netcp_device *netcp_device;
 	struct device *dev = &pdev->dev;
 	struct netcp_module *module;
@@ -2246,7 +2246,7 @@ static int netcp_probe(struct platform_device *pdev)
 		goto probe_quit;
 	}

-	for_each_available_child_of_node(interfaces, child) {
+	for_each_available_child_of_node_scoped(interfaces, child) {
 		ret = netcp_create_interface(netcp_device, child);
 		if (ret) {
 			dev_err(dev, "could not create interface(%pOFn)\n",
--
2.46.2.windows.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.