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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 14 Jun 2022 16:36:10 +0000 (18:36 +0200)
[ Upstream commit 5dd89d2fc438457811cbbec07999ce0d80051ff5 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/ti/am65-cpsw-nuss.c

index 130346f..ea9d073 100644 (file)
@@ -1802,6 +1802,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;
@@ -2668,9 +2669,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);