ChangeSet 1.1123.18.20, 2003/08/14 16:22:22-07:00, [EMAIL PROTECTED] [PATCH] USB: usbvideo cleanup on error
drivers/usb/media/usbvideo.c | 19 +++++++++++++++---- 1 files changed, 15 insertions(+), 4 deletions(-) diff -Nru a/drivers/usb/media/usbvideo.c b/drivers/usb/media/usbvideo.c --- a/drivers/usb/media/usbvideo.c Fri Aug 15 10:44:28 2003 +++ b/drivers/usb/media/usbvideo.c Fri Aug 15 10:44:28 2003 @@ -777,7 +777,7 @@ const struct usb_device_id *id_table) { struct usbvideo *cams; - int i, base_size; + int i, base_size, result; /* Check parameters for sanity */ if ((num_cams <= 0) || (pCams == NULL) || (cbTbl == NULL)) { @@ -846,9 +846,13 @@ up->user_size = num_cams * num_extra; up->user_data = (char *) kmalloc(up->user_size, GFP_KERNEL); if (up->user_data == NULL) { - up->user_size = 0; err("%s: Failed to allocate user_data (%d. bytes)", __FUNCTION__, up->user_size); + while (i) { + up = &cams->cam[--i]; + kfree(up->user_data); + } + kfree(cams); return -ENOMEM; } dbg("%s: Allocated cams[%d].user_data=$%p (%d. bytes)", @@ -878,9 +882,16 @@ * If the handle is not yet updated then the probe() will fail. */ *pCams = cams; - usb_register(&cams->usbdrv); + result = usb_register(&cams->usbdrv); + if (result) { + for (i = 0; i < num_cams; i++) { + struct uvd *up = &cams->cam[i]; + kfree(up->user_data); + } + kfree(cams); + } - return 0; + return result; } EXPORT_SYMBOL(usbvideo_register); ------------------------------------------------------- This SF.Net email sponsored by: Free pre-built ASP.NET sites including Data Reports, E-commerce, Portals, and Forums are available now. Download today and enter to win an XBOX or Visual Studio .NET. http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01 _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel