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 <sylphrena...@gmail.com> > > Signed-off-by: Sumera Priyadarsini <sylphrena...@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