[PATCH 1/1] mtd:nand:fix memory leak

Boris Brezillon boris.brezillon at bootlin.com
Wed Apr 4 00:07:10 PDT 2018


On Wed, 4 Apr 2018 08:28:07 +0200
Miquel Raynal <miquel.raynal at bootlin.com> wrote:

> Hi Xidong,
> 
> As part of a reorganization in the NAND subsystem, you should now
> prefix your commit title this way:
> 
>         mtd: rawnand: tango: fix memory leak
> 
> Not sure if this patch is candidate to cc:stable?
> 
> On Wed,  4 Apr 2018 11:05:51 +0800, Xidong Wang
> <wangxidong_97 at 163.com> wrote:
> 
> > In function tango_nand_probe(), the memory allocated by
> > clk_get() is not released on the normal path and
> > the error path that IS_ERR(nfc->chan) returns true.  
> 
> The fact that the error path returns true looks out of topic, can you
> remove it? Just saying that you fix a memory leak is enough I guess.
> 
> > This will result in a memory leak bug.
> > 
> > Signed-off-by: Xidong Wang <wangxidong_97 at 163.com>
> > ---
> >  drivers/mtd/nand/tango_nand.c | 5 ++++-
> >  1 file changed, 4 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/mtd/nand/tango_nand.c b/drivers/mtd/nand/tango_nand.c
> > index c5bee00b..8083459 100644
> > --- a/drivers/mtd/nand/tango_nand.c
> > +++ b/drivers/mtd/nand/tango_nand.c
> > @@ -648,12 +648,15 @@ static int tango_nand_probe(struct platform_device *pdev)
> >  		return PTR_ERR(clk);
> >  
> >  	nfc->chan = dma_request_chan(&pdev->dev, "rxtx");
> > -	if (IS_ERR(nfc->chan))
> > +	if (IS_ERR(nfc->chan)) {
> > +		clk_put(clk);
> >  		return PTR_ERR(nfc->chan);
> > +	}
> >  
> >  	platform_set_drvdata(pdev, nfc);
> >  	nand_hw_control_init(&nfc->hw);
> >  	nfc->freq_kHz = clk_get_rate(clk) / 1000;
> > +	clk_put(clk);  
> 
> If the clock is used only here, better do the frequency derivation
> right after the clock_get(), and follow with a clk_put()? This way you
> don't have to change the error path and 'related' actions remain
> grouped.

Hm, definitely not a good idea to release the reference you have on the
clk if the driver depends on it. I recommend using devm_clk_get() to
solve this leak.




More information about the linux-mtd mailing list