Browse Source

usb: Prevent memcpy() being called with NULL arguments

If there is no additional iface data then iface->extra is NULL and
iface->extralen is zero. Passing NULL to memcpy is undefined behaviour
even if the length of data to copy is zero. In other words a conforming
(debug) memcpy implementation is permitted to assert(dst && src) without
checking the value of n.

Add an extra branch to avoid this.
pull/309/merge
Daniel Thompson 10 years ago
committed by Karl Palsson
parent
commit
0b63408260
  1. 14
      lib/usb/usb_standard.c

14
lib/usb/usb_standard.c

@ -93,12 +93,14 @@ static uint16_t build_config_descriptor(usbd_device *usbd_dev,
total += count;
totallen += iface->bLength;
/* Copy extra bytes (function descriptors). */
memcpy(buf, iface->extra,
count = MIN(len, iface->extralen));
buf += count;
len -= count;
total += count;
totallen += iface->extralen;
if (iface->extra) {
memcpy(buf, iface->extra,
count = MIN(len, iface->extralen));
buf += count;
len -= count;
total += count;
totallen += iface->extralen;
}
/* For each endpoint... */
for (k = 0; k < iface->bNumEndpoints; k++) {
const struct usb_endpoint_descriptor *ep =

Loading…
Cancel
Save