mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
USB: usbip: fix nonconforming hub descriptor
Fix up the root-hub descriptor to accommodate the variable-length
DeviceRemovable and PortPwrCtrlMask fields, while marking all ports as
removable (and leaving the reserved bit zero unset).
Also add a build-time constraint on VHCI_HC_PORTS which must never be
greater than USB_MAXCHILDREN (but this was only enforced through a
KConfig constant).
This specifically fixes the descriptor layout whenever VHCI_HC_PORTS is
greater than seven (default is 8).
Fixes: 04679b3489 ("Staging: USB/IP: add client driver")
Cc: Takahiro Hirofuchi <[email protected]>
Cc: Valentina Manea <[email protected]>
Signed-off-by: Johan Hovold <[email protected]>
Acked-by: Shuah Khan <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
This commit is contained in:
parent
d81182ce30
commit
ec963b412a
1 changed files with 8 additions and 3 deletions
|
|
@ -235,14 +235,19 @@ done:
|
|||
|
||||
static inline void hub_descriptor(struct usb_hub_descriptor *desc)
|
||||
{
|
||||
int width;
|
||||
|
||||
memset(desc, 0, sizeof(*desc));
|
||||
desc->bDescriptorType = USB_DT_HUB;
|
||||
desc->bDescLength = 9;
|
||||
desc->wHubCharacteristics = cpu_to_le16(
|
||||
HUB_CHAR_INDV_PORT_LPSM | HUB_CHAR_COMMON_OCPM);
|
||||
|
||||
desc->bNbrPorts = VHCI_HC_PORTS;
|
||||
desc->u.hs.DeviceRemovable[0] = 0xff;
|
||||
desc->u.hs.DeviceRemovable[1] = 0xff;
|
||||
BUILD_BUG_ON(VHCI_HC_PORTS > USB_MAXCHILDREN);
|
||||
width = desc->bNbrPorts / 8 + 1;
|
||||
desc->bDescLength = USB_DT_HUB_NONVAR_SIZE + 2 * width;
|
||||
memset(&desc->u.hs.DeviceRemovable[0], 0, width);
|
||||
memset(&desc->u.hs.DeviceRemovable[width], 0xff, width);
|
||||
}
|
||||
|
||||
static int vhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
|
||||
|
|
|
|||
Loading…
Reference in a new issue