Re: [linux-usb-devel] USB: FIx locks and urb->status in adutux

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: <linux-usb-devel@...>
Cc: Pete Zaitcev <zaitcev@...>, <greg@...>, <linux-kernel@...>, <vitalivanov@...>, <netwiz@...>
Date: Tuesday, October 23, 2007 - 5:38 am

Am Dienstag 23 Oktober 2007 schrieb Pete Zaitcev:


Why bother? Simply call usb_kill_urb() unconditionally.
  

This leaves a race here:

	while (count > 0) {
		spin_lock_irqsave(&dev->buflock, flags);
		if (!dev->out_urb_finished) {
			spin_unlock_irqrestore(&dev->buflock, flags);

			timeout = COMMAND_TIMEOUT;
			while (timeout > 0) {
				if (signal_pending(current)) {
					dbg(1," %s : interrupted", __FUNCTION__);
					retval = -EINTR;
					goto exit;
				}
				mutex_unlock(&dev->mtx);
				timeout = interruptible_sleep_on_timeout(&dev->write_wait, timeout);

You can detect that the urb has not finished but the notification happens before
you go to sleep.


This is racy:
	dev = usb_get_intfdata(interface);
	if (!dev) {
		retval = -ENODEV;
		goto exit_no_device;
	}

	if ((retval = mutex_lock_interruptible(&adutux_mutex))) {
		dbg(2, "%s : mutex lock failed", __FUNCTION__);
		goto exit_no_device;
	}

You need to manipulate intfdata under lock, or disconnect will
happily free the datastructures.


You should set file->private_data to NULL in the error case.

[..]

I find it a bit silly to bother with _irqsave if you call schedule_timeout() in the
next line.

	Regards
		Oliver
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
USB: FIx locks and urb-&gt;status in adutux, Pete Zaitcev, (Mon Oct 22, 11:34 pm)
Re: [linux-usb-devel] USB: FIx locks and urb->status in adutux, Oliver Neukum, (Tue Oct 23, 5:38 am)
Re: USB: FIx locks and urb-&gt;status in adutux, Pete Zaitcev, (Tue Oct 23, 9:53 pm)
Re: USB: FIx locks and urb-&gt;status in adutux, Oliver Neukum, (Wed Oct 24, 10:49 am)
Re: USB: FIx locks and urb-&gt;status in adutux, Greg KH, (Wed Oct 24, 5:25 pm)
Re: USB: FIx locks and urb-&gt;status in adutux, Vitaliy Ivanov, (Fri Oct 26, 5:57 am)
Re: USB: FIx locks and urb-&gt;status in adutux, Vitaliy Ivanov, (Wed Oct 24, 10:09 am)
Re: USB: FIx locks and urb-&gt;status in adutux, Pete Zaitcev, (Wed Oct 24, 11:25 pm)
Re: USB: FIx locks and urb-&gt;status in adutux, Vitaliy Ivanov, (Mon Oct 29, 2:04 pm)
Re: USB: FIx locks and urb-&gt;status in adutux, Pete Zaitcev, (Tue Oct 30, 12:24 am)
Re: USB: FIx locks and urb-&gt;status in adutux, Vitaliy Ivanov, (Tue Oct 30, 9:09 am)
Re: USB: FIx locks and urb-&gt;status in adutux, Pete Zaitcev, (Tue Oct 30, 5:54 pm)
Re: USB: FIx locks and urb-&gt;status in adutux, Vitaliy Ivanov, (Wed Oct 31, 7:54 am)
Re: USB: FIx locks and urb-&gt;status in adutux, Pete Zaitcev, (Wed Oct 31, 6:01 pm)
Re: USB: FIx locks and urb-&gt;status in adutux, Vitaliy Ivanov, (Thu Nov 1, 5:06 am)
Re: USB: FIx locks and urb-&gt;status in adutux, Pete Zaitcev, (Thu Nov 1, 1:28 pm)
Re: USB: FIx locks and urb-&gt;status in adutux, Pete Zaitcev, (Wed Oct 24, 11:20 pm)
Re: USB: FIx locks and urb-&gt;status in adutux, Pete Zaitcev, (Tue Oct 23, 5:38 pm)
Re: USB: FIx locks and urb-&gt;status in adutux, Oliver Neukum, (Wed Oct 24, 10:04 am)