Re: [PATCH v2] ppdev: fix double-free of pp->pdev->name

Sudip Mukherjee <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.parport
Message-ID <20161110134959.GA27565@sudip-tp>
On Thu, Nov 10, 2016 at 02:18:12PM +0100, Arnd Bergmann wrote:
> On Sunday, October 30, 2016 11:19:24 PM CET Jann Horn wrote:
> > diff --git a/drivers/char/ppdev.c b/drivers/char/ppdev.c
> > index d23368874710..6af1ce04b3da 100644
> > --- a/drivers/char/ppdev.c
> > +++ b/drivers/char/ppdev.c
> > @@ -748,10 +748,7 @@ static int pp_release(struct inode *inode, struct file *file)
> >         }
> >  
> >         if (pp->pdev) {
> > -               const char *name = pp->pdev->name;
> > -
> >                 parport_unregister_device(pp->pdev);
> > -               kfree(name);
> >                 pp->pdev = NULL;
> >                 pr_debug(CHRDEV "%x: unregistered pardevice\n", minor);
> >         }
> > 
> 
> I took a closer look at this and found that we also leak the name
> that is passed in register_device() in the same file:
> 
>         name = kasprintf(GFP_KERNEL, CHRDEV "%x", minor);
> ...
>         pdev = parport_register_dev_model(port, name, &ppdev_cb, minor);
> 
> parport_register_dev_model() copies the name using kstrdup() and
> we should really free it after parport_register_dev_model().

yes. I missed that while converting the driver to use device model.
Thanks. I will send a patch to fix this tonight.

> 
> It's not a huge problem, just leaking a few bytes of memory, but
> the extra kfree() probably came from this confusion.

No, it was the old code which was not in the device-model. The old code
uses parport_register_device() which just uses the same string that is
passed to it and so it was freed while releasing the device.

Regards
Sudip
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.