dm: usb: Avoid exceeding available array size for storage devices

The limit on storage devices is USB_MAX_STOR_DEV but we use one extra
element while probing to see if a device is a storage device. Avoid this,
since it causes memory corruption.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Tested-by: Stephen Warren <swarren@nvidia.com>
master
Simon Glass 8 years ago
parent 2a981dc2c6
commit c89e79d419
  1. 14
      common/usb_storage.c

@ -176,6 +176,13 @@ static int usb_stor_probe_device(struct usb_device *dev)
if (dev == NULL)
return -ENOENT; /* no more devices available */
/* We don't have space to even probe if we hit the maximum */
if (usb_max_devs == USB_MAX_STOR_DEV) {
printf("max USB Storage Device reached: %d stopping\n",
usb_max_devs);
return -ENOSPC;
}
debug("\n\nProbing for storage\n");
if (usb_storage_probe(dev, 0, &usb_stor[usb_max_devs])) {
/* OK, it's a storage device. Iterate over its LUNs
@ -210,13 +217,6 @@ static int usb_stor_probe_device(struct usb_device *dev)
}
}
/* if storage device */
if (usb_max_devs == USB_MAX_STOR_DEV) {
printf("max USB Storage Device reached: %d stopping\n",
usb_max_devs);
return -ENOSPC;
}
return 0;
}

Loading…
Cancel
Save