linux-mtd.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] mtd: spi-nor: fix memory leak when using debugfs_lookup()
@ 2022-09-02 13:37 Greg Kroah-Hartman
  2022-09-02 14:01 ` Michael Walle
  0 siblings, 1 reply; 4+ messages in thread
From: Greg Kroah-Hartman @ 2022-09-02 13:37 UTC (permalink / raw)
  To: tudor.ambarus, pratyush
  Cc: linux-kernel, Greg Kroah-Hartman, Michael Walle, Miquel Raynal,
	Richard Weinberger, Vignesh Raghavendra, linux-mtd, stable

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


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] mtd: spi-nor: fix memory leak when using debugfs_lookup()
  2022-09-02 13:37 [PATCH] mtd: spi-nor: fix memory leak when using debugfs_lookup() Greg Kroah-Hartman
@ 2022-09-02 14:01 ` Michael Walle
  2022-09-24  8:46   ` Greg Kroah-Hartman
  0 siblings, 1 reply; 4+ messages in thread
From: Michael Walle @ 2022-09-02 14:01 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: tudor.ambarus, pratyush, linux-kernel, Miquel Raynal,
	Richard Weinberger, Vignesh Raghavendra, linux-mtd, stable

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);

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] mtd: spi-nor: fix memory leak when using debugfs_lookup()
  2022-09-02 14:01 ` Michael Walle
@ 2022-09-24  8:46   ` Greg Kroah-Hartman
  2023-02-08 12:58     ` Greg Kroah-Hartman
  0 siblings, 1 reply; 4+ messages in thread
From: Greg Kroah-Hartman @ 2022-09-24  8:46 UTC (permalink / raw)
  To: Michael Walle
  Cc: tudor.ambarus, pratyush, linux-kernel, Miquel Raynal,
	Richard Weinberger, Vignesh Raghavendra, linux-mtd, stable

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

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] mtd: spi-nor: fix memory leak when using debugfs_lookup()
  2022-09-24  8:46   ` Greg Kroah-Hartman
@ 2023-02-08 12:58     ` Greg Kroah-Hartman
  0 siblings, 0 replies; 4+ messages in thread
From: Greg Kroah-Hartman @ 2023-02-08 12:58 UTC (permalink / raw)
  To: Michael Walle
  Cc: tudor.ambarus, pratyush, linux-kernel, Miquel Raynal,
	Richard Weinberger, Vignesh Raghavendra, linux-mtd, stable

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

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-02-08 12:58 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-02 13:37 [PATCH] mtd: spi-nor: fix memory leak when using debugfs_lookup() Greg Kroah-Hartman
2022-09-02 14:01 ` Michael Walle
2022-09-24  8:46   ` Greg Kroah-Hartman
2023-02-08 12:58     ` Greg Kroah-Hartman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).