]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/usb/core/config.c
USB: Fix slab-out-of-bounds write in usb_get_bos_descriptor
[linux.git] / drivers / usb / core / config.c
index 20ff036b4c22d2812ff89732885d596e868f91e3..9d6cb709ca7bcf32eeb7e290ba5350da390d1ef5 100644 (file)
@@ -932,8 +932,8 @@ int usb_get_bos_descriptor(struct usb_device *dev)
 
        /* Get BOS descriptor */
        ret = usb_get_descriptor(dev, USB_DT_BOS, 0, bos, USB_DT_BOS_SIZE);
-       if (ret < USB_DT_BOS_SIZE) {
-               dev_err(ddev, "unable to get BOS descriptor\n");
+       if (ret < USB_DT_BOS_SIZE || bos->bLength < USB_DT_BOS_SIZE) {
+               dev_err(ddev, "unable to get BOS descriptor or descriptor too short\n");
                if (ret >= 0)
                        ret = -ENOMSG;
                kfree(bos);