|
@@ -1142,11 +1142,16 @@ static int acm_probe(struct usb_interface *intf,
|
|
}
|
|
}
|
|
|
|
|
|
while (buflen > 0) {
|
|
while (buflen > 0) {
|
|
|
|
+ elength = buffer[0];
|
|
|
|
+ if (!elength) {
|
|
|
|
+ dev_err(&intf->dev, "skipping garbage byte\n");
|
|
|
|
+ elength = 1;
|
|
|
|
+ goto next_desc;
|
|
|
|
+ }
|
|
if (buffer[1] != USB_DT_CS_INTERFACE) {
|
|
if (buffer[1] != USB_DT_CS_INTERFACE) {
|
|
dev_err(&intf->dev, "skipping garbage\n");
|
|
dev_err(&intf->dev, "skipping garbage\n");
|
|
goto next_desc;
|
|
goto next_desc;
|
|
}
|
|
}
|
|
- elength = buffer[0];
|
|
|
|
|
|
|
|
switch (buffer[2]) {
|
|
switch (buffer[2]) {
|
|
case USB_CDC_UNION_TYPE: /* we've found it */
|
|
case USB_CDC_UNION_TYPE: /* we've found it */
|