[PATCH] net: ethernet: sunplus: spl2sw: release the port node in probe
From: Wentao Liang
Date: Tue Nov 03 2026 - 06:53:33 EST
spl2sw_get_eth_child_node() returns a device node reference obtained
from for_each_child_of_node(), so the caller must drop it with
of_node_put(). spl2sw_probe() never does, leaking one reference per
port on both the success and the error paths.
Drop the reference once the node is no longer needed and on the early
continue paths.
Fixes: fd3040b9394c ("net: ethernet: Add driver for Sunplus SP7021")
Cc: stable@xxxxxxxxxxxxxxx
Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
Signed-off-by: Wentao Liang <vulab@xxxxxxxxxxx>
---
drivers/net/ethernet/sunplus/spl2sw_driver.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/ethernet/sunplus/spl2sw_driver.c b/drivers/net/ethernet/sunplus/spl2sw_driver.c
index 5e0e4c9ecbb0..551d36ea0579 100644
--- a/drivers/net/ethernet/sunplus/spl2sw_driver.c
+++ b/drivers/net/ethernet/sunplus/spl2sw_driver.c
@@ -427,6 +427,7 @@ static int spl2sw_probe(struct platform_device *pdev)
if (of_get_phy_mode(port_np, &phy_mode)) {
dev_err(&pdev->dev, "Failed to get phy-mode property of port@%d!\n",
i);
+ of_node_put(port_np);
continue;
}
@@ -435,17 +436,20 @@ static int spl2sw_probe(struct platform_device *pdev)
if (!phy_np) {
dev_err(&pdev->dev, "Failed to get phy-handle property of port@%d!\n",
i);
+ of_node_put(port_np);
continue;
}
/* Get mac-address from nvmem. */
ret = spl2sw_nvmem_get_mac_address(&pdev->dev, port_np, mac_addr);
if (ret == -EPROBE_DEFER) {
+ of_node_put(port_np);
goto out_unregister_dev;
} else if (ret) {
dev_info(&pdev->dev, "Generate a random mac address!\n");
eth_random_addr(mac_addr);
}
+ of_node_put(port_np);
/* Initialize the net device. */
ret = spl2sw_init_netdev(pdev, mac_addr, &ndev);
--
2.34.1