Message ID | 20220623070914.1781700-1-niejianglei2021@163.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: sfp: fix memory leak in sfp_probe() | expand |
Hi, > err = devm_add_action(sfp->dev, sfp_cleanup, sfp); > - if (err < 0) > + if (err < 0) { > + sfp_cleanup(sfp); > return err; > + } Better use devm_add_action_or_reset(), no? -michael
Le 23/06/2022 à 09:09, Jianglei Nie a écrit : > sfp_probe() allocates a memory chunk from sfp with sfp_alloc(), when > devm_add_action() fails, sfp is not freed, which leads to a memory leak. > > We should free the sfp with sfp_cleanup() when devm_add_action() fails. > > Signed-off-by: Jianglei Nie <niejianglei2021@163.com> > --- > drivers/net/phy/sfp.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c > index 9a5d5a10560f..366a89adabf5 100644 > --- a/drivers/net/phy/sfp.c > +++ b/drivers/net/phy/sfp.c > @@ -2517,8 +2517,10 @@ static int sfp_probe(struct platform_device *pdev) > platform_set_drvdata(pdev, sfp); > > err = devm_add_action(sfp->dev, sfp_cleanup, sfp); > - if (err < 0) > + if (err < 0) { > + sfp_cleanup(sfp); > return err; > + } Hi, or use devm_add_action_or_reset() instead? Just my 2c, CJ > > sff = sfp->type = &sfp_data; >
On Thu, 23 Jun 2022 15:09:14 +0800 Jianglei Nie wrote: > sfp_probe() allocates a memory chunk from sfp with sfp_alloc(), when > devm_add_action() fails, sfp is not freed, which leads to a memory leak. > > We should free the sfp with sfp_cleanup() when devm_add_action() fails. .. and please add a Fixes tag
diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c index 9a5d5a10560f..366a89adabf5 100644 --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c @@ -2517,8 +2517,10 @@ static int sfp_probe(struct platform_device *pdev) platform_set_drvdata(pdev, sfp); err = devm_add_action(sfp->dev, sfp_cleanup, sfp); - if (err < 0) + if (err < 0) { + sfp_cleanup(sfp); return err; + } sff = sfp->type = &sfp_data;
sfp_probe() allocates a memory chunk from sfp with sfp_alloc(), when devm_add_action() fails, sfp is not freed, which leads to a memory leak. We should free the sfp with sfp_cleanup() when devm_add_action() fails. Signed-off-by: Jianglei Nie <niejianglei2021@163.com> --- drivers/net/phy/sfp.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)