[PATCH] fix: net: ti: cpsw_init_common: fix excess of_node_put on parent node when cpts child not found
WenTao Liang <[email protected]> Fri, 26 Jun 2026 23:29:45 +0800
| Newsgroups | org.kernel.vger.linux-omap,org.kernel.vger.linux-kernel,org.kernel.vger.netdev,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
When no "cpts" child node exists in the device tree, cpts_node is assigned cpsw->dev->of_node without taking a reference via of_node_get. The function then unconditionally calls of_node_put(cpts_node) at the end, causing an excess put on the parent device node which can lead to a refcount underflow. Use of_node_get when falling back to the parent node to ensure the reference count is properly balanced with the subsequent of_node_put. Cc: [email protected] Fixes: ed3525eda4c4 ("net: ethernet: ti: introduce cpsw switchdev based driver part 1 - dual-emac") Signed-off-by: WenTao Liang <[email protected]> --- drivers/net/ethernet/ti/cpsw_priv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/ti/cpsw_priv.c b/drivers/net/ethernet/ti/cpsw_priv.c index 1f6f374551cb..b20567f96d78 100644 --- a/drivers/net/ethernet/ti/cpsw_priv.c +++ b/drivers/net/ethernet/ti/cpsw_priv.c @@ -553,7 +553,7 @@ int cpsw_init_common(struct cpsw_common *cpsw, void __iomem *ss_regs, cpts_node = of_get_child_by_name(cpsw->dev->of_node, "cpts"); if (!cpts_node) - cpts_node = cpsw->dev->of_node; + cpts_node = of_node_get(cpsw->dev->of_node); cpsw->cpts = cpts_create(cpsw->dev, cpts_regs, cpts_node, CPTS_N_ETX_TS); -- 2.39.5 (Apple Git-154)