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