diff options
author | Nishka Dasgupta <nishkadg.linux@gmail.com> | 2019-07-16 07:52:19 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-07-16 21:38:17 +0200 |
commit | 64fc973dee130019b86f2c4634a10d7a3158687e (patch) | |
tree | 93ca9b6b526cafe8d8c4599341ea2c2e5145f1dd /drivers | |
parent | net: ethernet: ti: cpsw: Add of_node_put() before return and break (diff) | |
download | linux-64fc973dee130019b86f2c4634a10d7a3158687e.tar.xz linux-64fc973dee130019b86f2c4634a10d7a3158687e.zip |
net: ethernet: mscc: ocelot_board: Add of_node_put() before return
Each iteration of for_each_available_child_of_node puts the previous
node, but in the case of a return from the middle of the loop, there is
no put, thus causing a memory leak. Hence add an of_node_put before the
return in two places.
Issue found with Coccinelle.
Signed-off-by: Nishka Dasgupta <nishkadg.linux@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ethernet/mscc/ocelot_board.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/net/ethernet/mscc/ocelot_board.c b/drivers/net/ethernet/mscc/ocelot_board.c index 58bde1a9eacb..2451d4a96490 100644 --- a/drivers/net/ethernet/mscc/ocelot_board.c +++ b/drivers/net/ethernet/mscc/ocelot_board.c @@ -291,8 +291,10 @@ static int mscc_ocelot_probe(struct platform_device *pdev) continue; err = ocelot_probe_port(ocelot, port, regs, phy); - if (err) + if (err) { + of_node_put(portnp); return err; + } phy_mode = of_get_phy_mode(portnp); if (phy_mode < 0) @@ -318,6 +320,7 @@ static int mscc_ocelot_probe(struct platform_device *pdev) dev_err(ocelot->dev, "invalid phy mode for port%d, (Q)SGMII only\n", port); + of_node_put(portnp); return -EINVAL; } |