On Wed, Feb 26, 2020 at 04:42:55PM +0800, Tiezhu Yang wrote: > On 02/26/2020 04:09 PM, Johan Hovold wrote: > > On Wed, Feb 26, 2020 at 02:15:23PM +0800, Tiezhu Yang wrote: > >> Make sure to free all the allocated memory before exiting from the function > >> usb_get_configuration() when an error is encountered. > > There's no leak in this function as far as I can tell. Any allocated > > memory is released in usb_destroy_configuration() when the last > > reference to the struct usb_device is dropped. > > Yes, you are right, the allocated memory in usb_get_configuration() > will be released in usb_destroy_configuration(). > > By the way, is it better to release the allocated memory as early as > possible > in usb_get_configuration()? Just like this: > > diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c > index bb63ee0..dd4ebeb 100644 > --- a/drivers/usb/core/config.c > +++ b/drivers/usb/core/config.c > @@ -885,12 +885,17 @@ int usb_get_configuration(struct usb_device *dev) > > length = ncfg * sizeof(char *); > dev->rawdescriptors = kzalloc(length, GFP_KERNEL); > - if (!dev->rawdescriptors) > + if (!dev->rawdescriptors) { > + kfree(dev->config); > return -ENOMEM; > + } No, there's no point in that. And just like your original proposal, this would also introduce a double free. Johan