We must not touch bDescriptorType if it is not within our buffer. To guarantee that we have to be sure the first two bytes of the descriptor are within the buffer. Signed-off-by: Oliver Neukum <oneukum@xxxxxxxx> --- drivers/usb/core/config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c index c7056b123d46..5891652b6202 100644 --- a/drivers/usb/core/config.c +++ b/drivers/usb/core/config.c @@ -575,7 +575,7 @@ static int usb_parse_interface(struct device *ddev, int cfgno, /* Parse all the endpoint descriptors */ n = 0; - while (size > 0) { + while (size >= sizeof(struct usb_descriptor_header)) { /* minimum length to get bDescriptorType */ if (((struct usb_descriptor_header *) buffer)->bDescriptorType == USB_DT_INTERFACE) break; -- 2.44.0