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

Reply via email to