summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/usb.c
diff options
context:
space:
mode:
authormglocker <mglocker@openbsd.org>2020-09-02 12:36:12 +0000
committermglocker <mglocker@openbsd.org>2020-09-02 12:36:12 +0000
commit548012a22ded9d254d0730ec3ed5b498078cb094 (patch)
tree23559649cdecf643256fa7084ef4b5e5d66f07bf /sys/dev/usb/usb.c
parentKNF and comment tweaks (diff)
downloadwireguard-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.c8
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