From oliver@neukum.org Fri Jan 5 08:42:31 2007 From: Oliver Neukum Date: Fri, 5 Jan 2007 17:42:35 +0100 Subject: USB: race on disconnect in mdc800 To: linux-usb-devel@lists.sourceforge.net, Greg KH Message-ID: <200701051742.35209.oliver@neukum.org> I overlooked one. Setting the flag and killing the URBs must be under the lock so that no URB is submitted after usb_kill_urb() Signed-off-by: Oliver Neukum Signed-off-by: Greg Kroah-Hartman --- drivers/usb/image/mdc800.c | 4 ++++ 1 file changed, 4 insertions(+) --- gregkh-2.6.orig/drivers/usb/image/mdc800.c +++ gregkh-2.6/drivers/usb/image/mdc800.c @@ -565,11 +565,15 @@ static void mdc800_usb_disconnect (struc usb_deregister_dev(intf, &mdc800_class); + /* must be under lock to make sure no URB + is submitted after usb_kill_urb() */ + mutex_lock(&mdc800->io_lock); mdc800->state=NOT_CONNECTED; usb_kill_urb(mdc800->irq_urb); usb_kill_urb(mdc800->write_urb); usb_kill_urb(mdc800->download_urb); + mutex_unlock(&mdc800->io_lock); mdc800->dev = NULL; usb_set_intfdata(intf, NULL);