On Wed, 10 May 2017, Johan Hovold wrote: > Add define for the maximum number of ports on a SuperSpeed hub as per > USB 3.1 spec Table 10-5, and use it when verifying the retrieved hub > descriptor. > > This specifically avoids benign attempts to update the DeviceRemovable > mask for non-existing ports (should we get that far). > > Fixes: dbe79bbe9dcb ("USB 3.0 Hub Changes") > Signed-off-by: Johan Hovold <johan@xxxxxxxxxx> > --- Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > drivers/usb/core/hub.c | 8 +++++++- > include/uapi/linux/usb/ch11.h | 3 +++ > 2 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c > index f77a4ebde7d5..b8bb20d7acdb 100644 > --- a/drivers/usb/core/hub.c > +++ b/drivers/usb/core/hub.c > @@ -1336,7 +1336,13 @@ static int hub_configure(struct usb_hub *hub, > if (ret < 0) { > message = "can't read hub descriptor"; > goto fail; > - } else if (hub->descriptor->bNbrPorts > USB_MAXCHILDREN) { > + } > + > + maxchild = USB_MAXCHILDREN; > + if (hub_is_superspeed(hdev)) > + maxchild = min_t(unsigned, maxchild, USB_SS_MAXPORTS); > + > + if (hub->descriptor->bNbrPorts > maxchild) { > message = "hub has too many ports!"; > ret = -ENODEV; > goto fail; > diff --git a/include/uapi/linux/usb/ch11.h b/include/uapi/linux/usb/ch11.h > index 361297e96f58..576c704e3fb8 100644 > --- a/include/uapi/linux/usb/ch11.h > +++ b/include/uapi/linux/usb/ch11.h > @@ -22,6 +22,9 @@ > */ > #define USB_MAXCHILDREN 31 > > +/* See USB 3.1 spec Table 10-5 */ > +#define USB_SS_MAXPORTS 15 > + > /* > * Hub request types > */ > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html