net: ethernet: ti: am65-cpsw-nuss: Fix some refcount leaks
authorMiaoqian Lin <linmq006@gmail.com>
Thu, 26 May 2022 08:52:08 +0000 (12:52 +0400)
committerDavid S. Miller <davem@davemloft.net>
Fri, 27 May 2022 07:00:40 +0000 (08:00 +0100)
of_get_child_by_name() returns a node pointer with refcount
incremented, we should use of_node_put() on it when not need anymore.
am65_cpsw_init_cpts() and am65_cpsw_nuss_probe() don't release
the refcount in error case.
Add missing of_node_put() to avoid refcount leak.

Fixes: b1f66a5bee07 ("net: ethernet: ti: am65-cpsw-nuss: enable packet timestamping support")
Fixes: 93a76530316a ("net: ethernet: ti: introduce am65x/j721e gigabit eth subsystem driver")
Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ti/am65-cpsw-nuss.c

index 77bdda97b2b08ba7ed540b707933652d9207b367..fb92d4c1547db4eddb348badbb647af37f482c18 100644 (file)
@@ -1789,6 +1789,7 @@ static int am65_cpsw_init_cpts(struct am65_cpsw_common *common)
        if (IS_ERR(cpts)) {
                int ret = PTR_ERR(cpts);
 
+               of_node_put(node);
                if (ret == -EOPNOTSUPP) {
                        dev_info(dev, "cpts disabled\n");
                        return 0;
@@ -2665,9 +2666,9 @@ static int am65_cpsw_nuss_probe(struct platform_device *pdev)
        if (!node)
                return -ENOENT;
        common->port_num = of_get_child_count(node);
+       of_node_put(node);
        if (common->port_num < 1 || common->port_num > AM65_CPSW_MAX_PORTS)
                return -ENOENT;
-       of_node_put(node);
 
        common->rx_flow_id_base = -1;
        init_completion(&common->tdown_complete);