2010-12-13 20:59:16

by Németh Márton

[permalink] [raw]
Subject: [PATCH] usbip: remove double giveback of URB

From: Márton Németh <[email protected]>

In the vhci_urb_dequeue() function the TCP connection is checked twice.
Each time when the TCP connection is closed the URB is unlinked and given
back. Remove the second attempt of unlinking and giving back of the URB completely.

This patch fixes the bug described at https://bugzilla.kernel.org/show_bug.cgi?id=24872 .

Signed-off-by: Márton Németh <[email protected]>
---
--- linux-2.6.37-rc5/drivers/staging/usbip/vhci_hcd.c.orig 2010-12-13 08:21:51.000000000 +0100
+++ linux-2.6.37-rc5/drivers/staging/usbip/vhci_hcd.c 2010-12-13 21:17:30.000000000 +0100
@@ -799,20 +799,6 @@ static int vhci_urb_dequeue(struct usb_h
spin_unlock_irqrestore(&vdev->priv_lock, flags2);
}

-
- if (!vdev->ud.tcp_socket) {
- /* tcp connection is closed */
- usbip_uinfo("vhci_hcd: vhci_urb_dequeue() gives back urb %p\n",
- urb);
-
- usb_hcd_unlink_urb_from_ep(hcd, urb);
-
- spin_unlock_irqrestore(&the_controller->lock, flags);
- usb_hcd_giveback_urb(vhci_to_hcd(the_controller), urb,
- urb->status);
- spin_lock_irqsave(&the_controller->lock, flags);
- }
-
spin_unlock_irqrestore(&the_controller->lock, flags);

usbip_dbg_vhci_hc("leave\n");


2010-12-13 21:34:47

by Greg KH

[permalink] [raw]
Subject: Re: [PATCH] usbip: remove double giveback of URB

On Mon, Dec 13, 2010 at 09:59:09PM +0100, N?meth M?rton wrote:
> From: M?rton N?meth <[email protected]>
>
> In the vhci_urb_dequeue() function the TCP connection is checked twice.
> Each time when the TCP connection is closed the URB is unlinked and given
> back. Remove the second attempt of unlinking and giving back of the URB completely.
>
> This patch fixes the bug described at https://bugzilla.kernel.org/show_bug.cgi?id=24872 .
>
> Signed-off-by: M?rton N?meth <[email protected]>

Wow, nice catch, I wonder how it survived this long in working condition
:)

I'll queue this up right away, thanks so much for this patch.

greg k-h