Hi,

if probe fails, allocated URBs and buffers must be freed.

        Regards
                Oliver

You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.

===================================================================


[EMAIL PROTECTED], 2003-07-16 23:51:16+02:00, [EMAIL PROTECTED]
   - fix memory leak in error path of probe


 irda-usb.c |   48 +++++++++++++++++++++++++++++-------------------
 1 files changed, 29 insertions(+), 19 deletions(-)


diff -Nru a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c
--- a/drivers/net/irda/irda-usb.c       Thu Jul 17 01:02:02 2003
+++ b/drivers/net/irda/irda-usb.c       Thu Jul 17 01:02:02 2003
@@ -1467,30 +1467,26 @@
        for (i = 0; i < IU_MAX_RX_URBS; i++) {
                self->rx_urb[i] = usb_alloc_urb(0, GFP_KERNEL);
                if (!self->rx_urb[i]) {
-                       int j;
-                       for (j = 0; j < i; j++)
-                               usb_free_urb(self->rx_urb[j]);
-                       return -ENOMEM;
+                       ret = -ENOMEM;
+                       goto err_out;
                }
        }
        self->tx_urb = usb_alloc_urb(0, GFP_KERNEL);
        if (!self->tx_urb) {
-               for (i = 0; i < IU_MAX_RX_URBS; i++)
-                       usb_free_urb(self->rx_urb[i]);
-               return -ENOMEM;
+               ret = -ENOMEM;
+               goto err_out;
        }
        self->speed_urb = usb_alloc_urb(0, GFP_KERNEL);
        if (!self->speed_urb) {
-               for (i = 0; i < IU_MAX_RX_URBS; i++)
-                       usb_free_urb(self->rx_urb[i]);
-               usb_free_urb(self->tx_urb);
-               return -ENOMEM;
+               ret = -ENOMEM;
+               goto err_out;
        }
 
        /* Is this really necessary? */
        if (usb_set_configuration (dev, dev->config[0].desc.bConfigurationValue) < 0) {
                err("set_configuration failed");
-               return -EIO;
+               ret = -EIO;
+               goto err_out;
        }
 
        /* Is this really necessary? */
@@ -1510,8 +1506,8 @@
                        break;
                default:
                        IRDA_DEBUG(0, "%s(), Unknown error %d\n", __FUNCTION__, ret);
-                       return -EIO;
-                       break;
+                       ret = -EIO;
+                       goto err_out;
        }
 
        /* Find our endpoints */
@@ -1519,15 +1515,17 @@
        if(!irda_usb_parse_endpoints(self, interface->endpoint,
                                     interface->desc.bNumEndpoints)) {
                ERROR("%s(), Bogus endpoints...\n", __FUNCTION__);
-               return -EIO;
+               ret = -EIO;
+               goto err_out;
        }
 
        /* Find IrDA class descriptor */
        irda_desc = irda_usb_find_class_desc(intf);
+       ret = -ENODEV;
        if (irda_desc == NULL)
-               return -ENODEV;
-       
-       self->irda_desc =  irda_desc;   
+               goto err_out;
+
+       self->irda_desc =  irda_desc;
        self->present = 1;
        self->netopen = 0;
        self->capability = id->driver_info;
@@ -1535,10 +1533,22 @@
        self->usbintf = intf;
        ret = irda_usb_open(self);
        if (ret)
-               return -ENOMEM;
+               goto err_out;
 
        usb_set_intfdata(intf, self);
        return 0;
+
+err_out:
+       /* Free all urbs */
+       for (i = 0; i < IU_MAX_RX_URBS; i++) {
+               if (self->rx_urb[i])
+                       usb_free_urb(self->rx_urb[i]);
+       }
+       if (self->tx_urb) {
+               usb_free_urb(self->tx_urb);
+       }
+
+       return ret;
 }
 
 /*------------------------------------------------------------------*/

===================================================================


This BitKeeper patch contains the following changesets:
1.2138
## Wrapped with gzip_uu ##


begin 664 bkpatch18971
M'XL(`&K9%3\``ZU5:6_:0!#][/T5(^5+4F1[+Y^4*!=M49LF(J6*U%3(QQHL
MP([EMAIL PROTECTED]>N[2@)!>5H:B'/,C/O[<SL8]F"42&DK^7S]$I(M`6?\J+T-;5>
M5+'(C$Q4LVIAY'*B8L,\5S%SFB^$V0+,;U*(PJR*4*>&A53.:5!&4U"APM>(
MP>X]Y>VE\+5A_^/HR_X0H5X/#J=!-A%GHH1>#X6SO;@2<V,F\V!:;[>\#R\I
MQH00:F%FV<1:4I<QOB0V#F.UC*GC):'MH:(4,MN3^?4\R&)C&LBK0,:&B*M5
M)H8=8A.'[EMAIL PROTECTED],8:VU;T-,X$.`1VC
M`WA[^8<H`M`A26]@(1:YO(6Y"&:09B"DS"5<[EMAIL PROTECTED]&3A^F
MB/17/@CA`*/=#;7'LFZX,#-1FJF,@^:EJT,VHH=N.'8)7A)E^)([7N#1R'&$
MB#`-O2=&]AQY<SZ4<(\K6F:Y3J.5)T";U?/F%M!$BLE>2QCEBY>4S3'GC'A+
MYJES;F3%R8JHN.=S_@)140]TXOTW6;U"5>W$3T"7U\U'J>3TJ>'[EMAIL PROTECTED]"'<P
M<[EMAIL PROTECTED];)[EMAIL PROTECTED],ZQ+'>55V&[EMAIL PROTECTED](:XN(&L(=8`+F_W
M<)T7`CP&I`9X;`4P.-F4;9$Z:Z`L7VVA35_/I[1AK^US['66K;(?U7S4_]ZR
MM%.P&%;V;[EMAIL PROTECTED]&L2C43P/@_DM#H&ZYIHS&;MA8"990Q73G\Y%F
MOH,/ZHZ'8#Z'2H8%O#.1EBCI;*>*'G<AA?<P&(V/]\_'P_/Q:'[EMAIL PROTECTED]
M4AND"6RW1<F;L8+_2'_NU/-1XADGBK;VK26HD?Q&CZ!E$VD)[EMAIL PROTECTED]:
?)3-0IOOP?Q1-130KJD7/27`21TF([EMAIL PROTECTED]<68LG^08`````
`
end



-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines at the
same time. Free trial click here: http://www.vmware.com/wl/offer/345/0
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to