diff mbox series

[V3] net: dsa: Add of_node_put() before break and return statements

Message ID 20200823193054.29336-1-sylphrenadin@gmail.com
State Changes Requested
Delegated to: David Miller
Headers show
Series [V3] net: dsa: Add of_node_put() before break and return statements | expand

Commit Message

Sumera Priyadarsini Aug. 23, 2020, 7:30 p.m. UTC
Every iteration of for_each_child_of_node() decrements
the reference count of the previous node, however when control
is transferred from the middle of the loop, as in the case of
a return or break or goto, there is no decrement thus ultimately
resulting in a memory leak.

Fix a potential memory leak in mt7530.c by inserting of_node_put()
before the break and return statements.

Issue found with Coccinelle.

---
Changes in v2:
	Add another of_node_put() in for_each_child_of_node() as pointed
out by Andrew.

Changes in v3:
	- Correct syntax errors
	- Modify commit message

---

Signed-off-by: Sumera Priyadarsini <sylphrenadin@gmail.com>

Signed-off-by: Sumera Priyadarsini <sylphrenadin@gmail.com>
---
 drivers/net/dsa/mt7530.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

David Miller Aug. 24, 2020, 1:20 p.m. UTC | #1
From: Sumera Priyadarsini <sylphrenadin@gmail.com>
Date: Mon, 24 Aug 2020 01:00:54 +0530

> ---
> 
> Signed-off-by: Sumera Priyadarsini <sylphrenadin@gmail.com>
> 
> Signed-off-by: Sumera Priyadarsini <sylphrenadin@gmail.com>

You only need one Signed-off-by:

You must not put the signoff after the "---" otherwise GIT will remove
it from the commit log message when I try to apply your patch.

Combine this with the fact that your change didn't even compile
properly up until even V2, I wish you would put more effort and
care into your patch submission.  It feels to reviewers like
you are just throwing this patch onto the mailing list without
much care or testing at all.

Thank you.
Vladimir Oltean Aug. 24, 2020, 1:35 p.m. UTC | #2
On Mon, Aug 24, 2020 at 01:00:54AM +0530, Sumera Priyadarsini wrote:
> Every iteration of for_each_child_of_node() decrements
> the reference count of the previous node, however when control
> is transferred from the middle of the loop, as in the case of
> a return or break or goto, there is no decrement thus ultimately
> resulting in a memory leak.
> 
> Fix a potential memory leak in mt7530.c by inserting of_node_put()
> before the break and return statements.
> 
> Issue found with Coccinelle.
> 
> ---
> Changes in v2:
> 	Add another of_node_put() in for_each_child_of_node() as pointed
> out by Andrew.
> 
> Changes in v3:
> 	- Correct syntax errors
> 	- Modify commit message
> 
> ---
> 
> Signed-off-by: Sumera Priyadarsini <sylphrenadin@gmail.com>
> 
> Signed-off-by: Sumera Priyadarsini <sylphrenadin@gmail.com>
> ---

If you need to resend anyway, can we please have a proper commit prefix?
A patch on mt7530.c shouldn't be "net: dsa: " but "net: dsa: mt7530: "
as "git log" will tell you. The difference is relevant because "net:
dsa: " typically refers to the generic code in net/dsa/.

>  drivers/net/dsa/mt7530.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
> index 8dcb8a49ab67..4b4701c69fe1 100644
> --- a/drivers/net/dsa/mt7530.c
> +++ b/drivers/net/dsa/mt7530.c
> @@ -1326,14 +1326,17 @@ mt7530_setup(struct dsa_switch *ds)
>  
>  			if (phy_node->parent == priv->dev->of_node->parent) {
>  				ret = of_get_phy_mode(mac_np, &interface);
> -				if (ret && ret != -ENODEV)
> +				if (ret && ret != -ENODEV) {
> +					of_node_put(mac_np);
>  					return ret;
> +				}
>  				id = of_mdio_parse_addr(ds->dev, phy_node);
>  				if (id == 0)
>  					priv->p5_intf_sel = P5_INTF_SEL_PHY_P0;
>  				if (id == 4)
>  					priv->p5_intf_sel = P5_INTF_SEL_PHY_P4;
>  			}
> +			of_node_put(mac_np);
>  			of_node_put(phy_node);
>  			break;
>  		}
> -- 
> 2.17.1
> 

Thanks,
-Vladimir
diff mbox series

Patch

diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
index 8dcb8a49ab67..4b4701c69fe1 100644
--- a/drivers/net/dsa/mt7530.c
+++ b/drivers/net/dsa/mt7530.c
@@ -1326,14 +1326,17 @@  mt7530_setup(struct dsa_switch *ds)
 
 			if (phy_node->parent == priv->dev->of_node->parent) {
 				ret = of_get_phy_mode(mac_np, &interface);
-				if (ret && ret != -ENODEV)
+				if (ret && ret != -ENODEV) {
+					of_node_put(mac_np);
 					return ret;
+				}
 				id = of_mdio_parse_addr(ds->dev, phy_node);
 				if (id == 0)
 					priv->p5_intf_sel = P5_INTF_SEL_PHY_P0;
 				if (id == 4)
 					priv->p5_intf_sel = P5_INTF_SEL_PHY_P4;
 			}
+			of_node_put(mac_np);
 			of_node_put(phy_node);
 			break;
 		}