diff options
author | 2020-09-02 12:36:12 +0000 | |
---|---|---|
committer | 2020-09-02 12:36:12 +0000 | |
commit | 548012a22ded9d254d0730ec3ed5b498078cb094 (patch) | |
tree | 23559649cdecf643256fa7084ef4b5e5d66f07bf /sys/dev/usb/usb.c | |
parent | KNF and comment tweaks (diff) | |
download | wireguard-openbsd-548012a22ded9d254d0730ec3ed5b498078cb094.tar.xz wireguard-openbsd-548012a22ded9d254d0730ec3ed5b498078cb094.zip |
Don't rely on wTotalLength for usbd_get_cdesc() malloc/free but on the
actual length which has been allocated. We saw cases where the
wTotalLength value is changing on a second read, e.g. when a USB device
was waked up from sleep mode.
ok mpi@
Diffstat (limited to 'sys/dev/usb/usb.c')
-rw-r--r-- | sys/dev/usb/usb.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/dev/usb/usb.c b/sys/dev/usb/usb.c index 4ca725aad6d..f4a77afb01f 100644 --- a/sys/dev/usb/usb.c +++ b/sys/dev/usb/usb.c @@ -1,4 +1,4 @@ -/* $OpenBSD: usb.c,v 1.125 2020/08/27 19:55:00 mglocker Exp $ */ +/* $OpenBSD: usb.c,v 1.126 2020/09/02 12:36:12 mglocker Exp $ */ /* $NetBSD: usb.c,v 1.77 2003/01/01 00:10:26 thorpej Exp $ */ /* @@ -516,7 +516,7 @@ usb_fill_udc_task(void *arg) struct usb_device_cdesc *udc = (struct usb_device_cdesc *)arg; struct usb_softc *sc; struct usbd_device *dev; - int addr = udc->udc_addr; + int addr = udc->udc_addr, cdesc_len; usb_config_descriptor_t *cdesc; /* check that the bus and device are still present */ @@ -530,11 +530,11 @@ usb_fill_udc_task(void *arg) return; cdesc = usbd_get_cdesc(sc->sc_bus->devices[addr], - udc->udc_config_index, 0); + udc->udc_config_index, &cdesc_len); if (cdesc == NULL) return; udc->udc_desc = *cdesc; - free(cdesc, M_TEMP, UGETW(cdesc->wTotalLength)); + free(cdesc, M_TEMP, cdesc_len); } void |