[PATCH] mtd: spi-nor: fix memory leak when using debugfs_lookup()

Greg Kroah-Hartman posted 1 patch 3 years, 7 months ago
There is a newer version of this series
drivers/mtd/spi-nor/debugfs.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH] mtd: spi-nor: fix memory leak when using debugfs_lookup()
Posted by Greg Kroah-Hartman 3 years, 7 months ago
When calling debugfs_lookup() the result must have dput() called on it,
otherwise the memory will leak over time.  Fix this up to be much
simpler logic and only create the root debugfs directory once when the
driver is first accessed.  That resolves the memory leak and makes
things more obvious as to what the intent is.

Cc: Tudor Ambarus <tudor.ambarus@microchip.com>
Cc: Pratyush Yadav <pratyush@kernel.org>
Cc: Michael Walle <michael@walle.cc>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Vignesh Raghavendra <vigneshr@ti.com>
Cc: linux-mtd@lists.infradead.org
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/mtd/spi-nor/debugfs.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/spi-nor/debugfs.c b/drivers/mtd/spi-nor/debugfs.c
index df76cb5de3f9..3aab595e82d1 100644
--- a/drivers/mtd/spi-nor/debugfs.c
+++ b/drivers/mtd/spi-nor/debugfs.c
@@ -228,11 +228,11 @@ static void spi_nor_debugfs_unregister(void *data)
 
 void spi_nor_debugfs_register(struct spi_nor *nor)
 {
-	struct dentry *rootdir, *d;
+	static struct dentry *rootdir;
+	struct dentry *d;
 	int ret;
 
 	/* Create rootdir once. Will never be deleted again. */
-	rootdir = debugfs_lookup(SPI_NOR_DEBUGFS_ROOT, NULL);
 	if (!rootdir)
 		rootdir = debugfs_create_dir(SPI_NOR_DEBUGFS_ROOT, NULL);
 
-- 
2.37.3
Re: [PATCH] mtd: spi-nor: fix memory leak when using debugfs_lookup()
Posted by Michael Walle 3 years, 7 months ago
Hi,

Am 2022-09-02 15:37, schrieb Greg Kroah-Hartman:
> When calling debugfs_lookup() the result must have dput() called on it,
> otherwise the memory will leak over time.  Fix this up to be much
> simpler logic and only create the root debugfs directory once when the
> driver is first accessed.  That resolves the memory leak and makes
> things more obvious as to what the intent is.
> 
> Cc: Tudor Ambarus <tudor.ambarus@microchip.com>
> Cc: Pratyush Yadav <pratyush@kernel.org>
> Cc: Michael Walle <michael@walle.cc>
> Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> Cc: Richard Weinberger <richard@nod.at>
> Cc: Vignesh Raghavendra <vigneshr@ti.com>
> Cc: linux-mtd@lists.infradead.org
> Cc: stable <stable@kernel.org>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
>  drivers/mtd/spi-nor/debugfs.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mtd/spi-nor/debugfs.c 
> b/drivers/mtd/spi-nor/debugfs.c
> index df76cb5de3f9..3aab595e82d1 100644
> --- a/drivers/mtd/spi-nor/debugfs.c
> +++ b/drivers/mtd/spi-nor/debugfs.c
> @@ -228,11 +228,11 @@ static void spi_nor_debugfs_unregister(void 
> *data)
> 
>  void spi_nor_debugfs_register(struct spi_nor *nor)
>  {
> -	struct dentry *rootdir, *d;
> +	static struct dentry *rootdir;
> +	struct dentry *d;
>  	int ret;
> 
>  	/* Create rootdir once. Will never be deleted again. */
> -	rootdir = debugfs_lookup(SPI_NOR_DEBUGFS_ROOT, NULL);

IIRC I had that one and it didn't work with spi-nor as a module.
Wouldn't it try to create the root dir twice if you remove the module
and load it again?

-michael

>  	if (!rootdir)
>  		rootdir = debugfs_create_dir(SPI_NOR_DEBUGFS_ROOT, NULL);
Re: [PATCH] mtd: spi-nor: fix memory leak when using debugfs_lookup()
Posted by Greg Kroah-Hartman 3 years, 6 months ago
On Fri, Sep 02, 2022 at 04:01:36PM +0200, Michael Walle wrote:
> Hi,
> 
> Am 2022-09-02 15:37, schrieb Greg Kroah-Hartman:
> > When calling debugfs_lookup() the result must have dput() called on it,
> > otherwise the memory will leak over time.  Fix this up to be much
> > simpler logic and only create the root debugfs directory once when the
> > driver is first accessed.  That resolves the memory leak and makes
> > things more obvious as to what the intent is.
> > 
> > Cc: Tudor Ambarus <tudor.ambarus@microchip.com>
> > Cc: Pratyush Yadav <pratyush@kernel.org>
> > Cc: Michael Walle <michael@walle.cc>
> > Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> > Cc: Richard Weinberger <richard@nod.at>
> > Cc: Vignesh Raghavendra <vigneshr@ti.com>
> > Cc: linux-mtd@lists.infradead.org
> > Cc: stable <stable@kernel.org>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > ---
> >  drivers/mtd/spi-nor/debugfs.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/mtd/spi-nor/debugfs.c
> > b/drivers/mtd/spi-nor/debugfs.c
> > index df76cb5de3f9..3aab595e82d1 100644
> > --- a/drivers/mtd/spi-nor/debugfs.c
> > +++ b/drivers/mtd/spi-nor/debugfs.c
> > @@ -228,11 +228,11 @@ static void spi_nor_debugfs_unregister(void *data)
> > 
> >  void spi_nor_debugfs_register(struct spi_nor *nor)
> >  {
> > -	struct dentry *rootdir, *d;
> > +	static struct dentry *rootdir;
> > +	struct dentry *d;
> >  	int ret;
> > 
> >  	/* Create rootdir once. Will never be deleted again. */
> > -	rootdir = debugfs_lookup(SPI_NOR_DEBUGFS_ROOT, NULL);
> 
> IIRC I had that one and it didn't work with spi-nor as a module.
> Wouldn't it try to create the root dir twice if you remove the module
> and load it again?

Yes it would, that is a use-model I did not consider at all, thanks.
I'll rework this.

greg k-h
Re: [PATCH] mtd: spi-nor: fix memory leak when using debugfs_lookup()
Posted by Greg Kroah-Hartman 3 years, 1 month ago
On Sat, Sep 24, 2022 at 10:46:22AM +0200, Greg Kroah-Hartman wrote:
> On Fri, Sep 02, 2022 at 04:01:36PM +0200, Michael Walle wrote:
> > Hi,
> > 
> > Am 2022-09-02 15:37, schrieb Greg Kroah-Hartman:
> > > When calling debugfs_lookup() the result must have dput() called on it,
> > > otherwise the memory will leak over time.  Fix this up to be much
> > > simpler logic and only create the root debugfs directory once when the
> > > driver is first accessed.  That resolves the memory leak and makes
> > > things more obvious as to what the intent is.
> > > 
> > > Cc: Tudor Ambarus <tudor.ambarus@microchip.com>
> > > Cc: Pratyush Yadav <pratyush@kernel.org>
> > > Cc: Michael Walle <michael@walle.cc>
> > > Cc: Miquel Raynal <miquel.raynal@bootlin.com>
> > > Cc: Richard Weinberger <richard@nod.at>
> > > Cc: Vignesh Raghavendra <vigneshr@ti.com>
> > > Cc: linux-mtd@lists.infradead.org
> > > Cc: stable <stable@kernel.org>
> > > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > > ---
> > >  drivers/mtd/spi-nor/debugfs.c | 4 ++--
> > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/drivers/mtd/spi-nor/debugfs.c
> > > b/drivers/mtd/spi-nor/debugfs.c
> > > index df76cb5de3f9..3aab595e82d1 100644
> > > --- a/drivers/mtd/spi-nor/debugfs.c
> > > +++ b/drivers/mtd/spi-nor/debugfs.c
> > > @@ -228,11 +228,11 @@ static void spi_nor_debugfs_unregister(void *data)
> > > 
> > >  void spi_nor_debugfs_register(struct spi_nor *nor)
> > >  {
> > > -	struct dentry *rootdir, *d;
> > > +	static struct dentry *rootdir;
> > > +	struct dentry *d;
> > >  	int ret;
> > > 
> > >  	/* Create rootdir once. Will never be deleted again. */
> > > -	rootdir = debugfs_lookup(SPI_NOR_DEBUGFS_ROOT, NULL);
> > 
> > IIRC I had that one and it didn't work with spi-nor as a module.
> > Wouldn't it try to create the root dir twice if you remove the module
> > and load it again?
> 
> Yes it would, that is a use-model I did not consider at all, thanks.
> I'll rework this.

v2 with this fixed up now sent, thanks.

greg k-h