On Wed, Jan 23, 2002 at 02:22:51PM -0800, Greg KH wrote:
> On Wed, Jan 23, 2002 at 01:24:36PM -0800, Greg KH wrote:
> > On Wed, Jan 23, 2002 at 09:44:14AM +0100, Vojtech Pavlik wrote:
> > > On Tue, Jan 22, 2002 at 08:54:05PM -0800, Greg KH wrote:
> > > > Vojtech, is this a USB function that you want added to usb.c?
> > > 
> > > Yes, please. This will change later when Pat Mochels devicefs kicks in,
> > > but for the time being, it'd be very useful.
> > 
> > Here's a patch against 2.5.3-pre3, does it look ok to you (I fixed the
> > potential memory leak in the second kmalloc call from what was in
> > 2.5.2-dj4)?

Yes, this is perfect. *shiver* I can't believe I made the code so leaky.
Sorry for that, it's a copy-paste problem.
Thanks for fixing it.

> Oops, more memory leak fixes:
> 
> > diff -Nru a/drivers/usb/usb.c b/drivers/usb/usb.c
> > --- a/drivers/usb/usb.c     Wed Jan 23 13:20:28 2002
> > +++ b/drivers/usb/usb.c     Wed Jan 23 13:20:28 2002
> > @@ -2513,6 +2513,49 @@
> >     return err;
> >  }
> >  
> > +/**
> > + * usb_make_path - returns device path in the hub tree
> > + * @dev: the device whose path is being constructed
> > + * @buf: where to put the string
> > + * @size: how big is "buf"?
> > + *
> > + * Returns length of the string (>= 0) or out of memory status (< 0).
> > + */
> > +int usb_make_path(struct usb_device *dev, char *buf, size_t size)
> > +{
> > +   struct usb_device *pdev = dev->parent;
> > +   char *tmp;
> > +   char *port;
> > +   int i;
> > +
> > +   if (!(port = kmalloc(size, GFP_KERNEL)))
> > +           return -ENOMEM;
> > +   if (!(tmp = kmalloc(size, GFP_KERNEL))) {
> > +           kfree(port);
> > +           return -ENOMEM;
> > +   }
> > +
> > +   *port = 0;
> > +
> > +   while (pdev) {
> > +           for (i = 0; i < pdev->maxchild; i++)
> > +                   if (pdev->children[i] == dev)
> > +                           break;
> > +
> > +           if (pdev->children[i] != dev)
> > +                   return -1;
> 
> Should be:
>               if (pdev->children[i] != dev) {
>                       kfree(port);
>                       kfree(tmp);
>                       return -ENODEV;
>               }
> 
> > +
> > +           strcpy(tmp, port);
> > +           snprintf(port, size, strlen(port) ? "%d.%s" : "%d", i + 1, tmp);
> > +
> > +           dev = pdev;
> > +           pdev = dev->parent;
> > +   }
> > +
> > +   snprintf(buf, size, "usb%d:%s", dev->bus->busnum, port);
> 
> And add:
>       kfree(port);
>       kfree(tmp);
> 
> > +   return strlen(buf);
> > +}
> 
> 
> Does that look better?
> 
> thanks,
> 
> greg k-h

-- 
Vojtech Pavlik
SuSE Labs

_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to