Hi,

it seems that pegasus_probe() has a memory leak in the error case and
pegasus_disconnect() fails to unlink urbs before it frees them.
A patch is included.

        Regards
                Oliver

--- pegasus.c.alt       Sat Feb  2 00:29:17 2002
+++ pegasus.c   Sat Feb  2 00:34:32 2002
@@ -885,6 +885,9 @@
 
        net = init_etherdev( NULL, 0 );
        if ( !net ) {
+               usb_free_urb (pegasus->tx_urb);
+               usb_free_urb (pegasus->rx_urb);
+               usb_free_urb (pegasus->ctrl_urb);
                kfree( pegasus );
                return  NULL;
        }
@@ -911,6 +914,9 @@
                err("can't reset MAC");
                unregister_netdev( pegasus->net );
                kfree(pegasus->net);
+               usb_free_urb (pegasus->tx_urb);
+               usb_free_urb (pegasus->rx_urb);
+               usb_free_urb (pegasus->ctrl_urb);
                kfree(pegasus);
                pegasus = NULL;
                return NULL;
@@ -947,6 +953,10 @@
        pegasus->flags |= PEGASUS_UNPLUG;
        unregister_netdev( pegasus->net );
        usb_dec_dev_use( dev );
+       usb_unlink_urb(pegasus->intr_urb);
+       usb_unlink_urb(pegasus->tx_urb);
+       usb_unlink_urb(pegasus->rx_urb);
+       usb_unlink_urb(pegasus->ctrl_urb);
        usb_free_urb (pegasus->intr_urb);
        usb_free_urb (pegasus->tx_urb);
        usb_free_urb (pegasus->rx_urb);

_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to