@@ -117,6 +117,14 @@
#define USB_DT_INTERFACE 0x04
#define USB_DT_ENDPOINT 0x05
+/*
+ * Descriptor sizes per descriptor type
+ */
+#define USB_DT_DEVICE_SIZE 18
+#define USB_DT_CONFIG_SIZE 9
+#define USB_DT_INTERFACE_SIZE 9
+#define USB_DT_ENDPOINT_SIZE 7
+
#define USB_ENDPOINT_XFER_CONTROL 0
#define USB_ENDPOINT_XFER_ISOC 1
#define USB_ENDPOINT_XFER_BULK 2
@@ -299,7 +299,7 @@ static int usb_host_claim_interfaces(USBHostDevice *dev, int configuration)
i = 0;
dev_descr_len = dev->descr[0];
- if (dev_descr_len > dev->descr_len) {
+ if ( dev_descr_len < USB_DT_DEVICE_SIZE || dev_descr_len > dev->descr_len) {
goto fail;
}
@@ -314,6 +314,8 @@ static int usb_host_claim_interfaces(USBHostDevice *dev, int configuration)
continue;
}
config_descr_len = dev->descr[i];
+ if ( config_descr_len < USB_DT_CONFIG_SIZE )
+ goto fail;
printf("husb: config #%d need %d\n", dev->descr[i + 5], configuration);