This patch fixes validation of maxpacket value given in endpoint descriptor. Added check of maxpacket for bulk endpoints. Correct maxpacket value is: FULL-SPEED HIGH-SPEED BULK 64 512 INTERRUPT 64 1024 ISOCHRONOUS 1023 1024 Signed-off-by: Robert Baldyga <r.baldyga@xxxxxxxxxxx> --- drivers/usb/gadget/epautoconf.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/usb/gadget/epautoconf.c b/drivers/usb/gadget/epautoconf.c index a777f7b..35bde34 100644 --- a/drivers/usb/gadget/epautoconf.c +++ b/drivers/usb/gadget/epautoconf.c @@ -136,16 +136,26 @@ ep_matches ( * the usb spec fixes high speed bulk maxpacket at 512 bytes. */ max = 0x7ff & usb_endpoint_maxp(desc); + + if (ep->maxpacket < max) + return 0; + switch (type) { + case USB_ENDPOINT_XFER_BULK: + /* BULK: limit 512 high/super speed */ + if (max > 512) + return 0; + /* FALLTHROUGH */ + case USB_ENDPOINT_XFER_INT: - /* INT: limit 64 bytes full speed, 1024 high/super speed */ + /* BULK/INT: limit 64 bytes full speed */ if (!gadget_is_dualspeed(gadget) && max > 64) return 0; /* FALLTHROUGH */ case USB_ENDPOINT_XFER_ISOC: - /* ISO: limit 1023 bytes full speed, 1024 high/super speed */ - if (ep->maxpacket < max) + /* INT/ISO: limit 1023 bytes full speed, 1024 high/super speed */ + if (max > 1024) return 0; if (!gadget_is_dualspeed(gadget) && max > 1023) return 0; -- 1.7.9.5 -- 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