Commit 1ac7c8a7 authored by Shuah Khan's avatar Shuah Khan Committed by Greg Kroah-Hartman

usbip: fix usbip attach to find a port that matches the requested speed

usbip attach fails to find a free port when the device on the first port
is a USB_SPEED_SUPER device and non-super speed device is being attached.
It keeps checking the first port and returns without a match getting stuck
in a loop.

Fix it check to find the first port with matching speed.
Reported-by: default avatarJuan Zea <juan.zea@qindel.com>
Signed-off-by: default avatarShuah Khan <shuahkh@osg.samsung.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 770b2ede
...@@ -329,9 +329,17 @@ int usbip_vhci_refresh_device_list(void) ...@@ -329,9 +329,17 @@ int usbip_vhci_refresh_device_list(void)
int usbip_vhci_get_free_port(uint32_t speed) int usbip_vhci_get_free_port(uint32_t speed)
{ {
for (int i = 0; i < vhci_driver->nports; i++) { for (int i = 0; i < vhci_driver->nports; i++) {
if (speed == USB_SPEED_SUPER &&
vhci_driver->idev[i].hub != HUB_SPEED_SUPER) switch (speed) {
continue; case USB_SPEED_SUPER:
if (vhci_driver->idev[i].hub != HUB_SPEED_SUPER)
continue;
break;
default:
if (vhci_driver->idev[i].hub != HUB_SPEED_HIGH)
continue;
break;
}
if (vhci_driver->idev[i].status == VDEV_ST_NULL) if (vhci_driver->idev[i].status == VDEV_ST_NULL)
return vhci_driver->idev[i].port; return vhci_driver->idev[i].port;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment