Thanks all for your comments. On Mon, Mar 12, 2012 at 10:11 PM, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote: > On Mon, 12 Mar 2012, Michal Nazarewicz wrote: > >> On Mon, 12 Mar 2012 14:00:19 +0100, Huajun Li <huajun.li.lee@xxxxxxxxx> wrote: >> >> > Non-hub device has no child, and even a real USB hub has ports far >> > less than USB_MAXCHILDREN, so there is no need using a fix array for >> > child devices, just allocate it dynamically according real port >> > number. >> > >> > Signed-off-by: Huajun Li <huajun.li.lee@xxxxxxxxx> >> > --- >> > drivers/usb/core/hub.c | 10 +++++++--- >> > include/linux/usb.h | 2 +- >> > 2 files changed, 8 insertions(+), 4 deletions(-) >> > >> > diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c >> > index 72c51cd..28664eb 100644 >> > --- a/drivers/usb/core/hub.c >> > +++ b/drivers/usb/core/hub.c >> > @@ -1047,8 +1047,10 @@ static int hub_configure(struct usb_hub *hub, >> > dev_info (hub_dev, "%d port%s detected\n", hdev->maxchild, >> > (hdev->maxchild == 1) ? "" : "s"); >> > >> > + hdev->children = kzalloc(hdev->maxchild * >> > + sizeof(struct usb_device *), GFP_KERNEL); >> >> kcalloc() Hi Michal, Thanks for your reminder, will update it. >> >> > hub->port_owners = kzalloc(hdev->maxchild * sizeof(void *), GFP_KERNEL); >> > - if (!hub->port_owners) { >> > + if (!hdev->children || !hub->port_owners) { >> >> Memory leak if hdev->children != NULL. Just add: >> >> kfree(hdev->children); >> >> if you don't want to add another “if” or a label. > > No, this is correct as it stands. There is no memory leak. > There is no memory leak as Alan said. You know, once hub_configure() fails, hub_disconnect() will be called to release resources. -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html