diff options
Diffstat (limited to 'drivers/usb/usbip/vhci_hcd.c')
| -rw-r--r-- | drivers/usb/usbip/vhci_hcd.c | 11 | 
1 files changed, 8 insertions, 3 deletions
| diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c index 5d8b2c261940..0585078638db 100644 --- a/drivers/usb/usbip/vhci_hcd.c +++ b/drivers/usb/usbip/vhci_hcd.c @@ -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, |