USB: Remove races in devio.c
There exist races in devio.c, below is one case,
and there are similar races in destroy_async()
and proc_unlinkurb().  Remove these races.
 cancel_bulk_urbs()        async_completed()
-------------------                -----------------------
 spin_unlock(&ps->lock);
                           list_move_tail(&as->asynclist,
		                    &ps->async_completed);
                           wake_up(&ps->wait);
                           Lead to free_async() be triggered,
                           then urb and 'as' will be freed.
 usb_unlink_urb(as->urb);
 ===> refer to the freed 'as'
Signed-off-by:  Huajun Li <huajun.li.lee@gmail.com>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Oncaphillis <oncaphillis@snafu.de>
Cc: stable <stable@vger.kernel.org>
Signed-off-by:
Huajun Li <huajun.li.lee@gmail.com>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Oncaphillis <oncaphillis@snafu.de>
Cc: stable <stable@vger.kernel.org>
Signed-off-by:  Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Loading
Please register or sign in to comment
