diff options
author | John-Mark Gurney <jmg@FreeBSD.org> | 2021-06-29 01:09:14 +0000 |
---|---|---|
committer | John-Mark Gurney <jmg@FreeBSD.org> | 2021-06-29 01:09:14 +0000 |
commit | 3d5104182c2eb4336905e89aa0d089b67aa746e3 (patch) | |
tree | bc9b02df0a3d9ecdb0f22b2423f388eaa6b072f5 | |
parent | f94360971e649fa684ef3b7e72839b59c7242bdb (diff) | |
download | src-3d5104182c2eb4336905e89aa0d089b67aa746e3.tar.gz src-3d5104182c2eb4336905e89aa0d089b67aa746e3.zip |
ued may be NULL here which will cause a panic... reproducable by
simply doing a usbconfig reset on a device which doesn't reset itself
properly...
-rw-r--r-- | sys/dev/usb/net/if_cdce.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/sys/dev/usb/net/if_cdce.c b/sys/dev/usb/net/if_cdce.c index 64c31896d417..24813ea305e4 100644 --- a/sys/dev/usb/net/if_cdce.c +++ b/sys/dev/usb/net/if_cdce.c @@ -709,18 +709,18 @@ alloc_transfers: if ((ued == NULL) || (ued->bLength < sizeof(*ued))) { error = USB_ERR_INVAL; } else { + /* + * ECM 1.2 doesn't say it excludes the CRC, but states that it's + * normally 1514, which excludes the CRC. + */ + DPRINTF("max segsize: %d\n", UGETW(ued->wMaxSegmentSize)); + if (UGETW(ued->wMaxSegmentSize) >= (ETHER_MAX_LEN - ETHER_CRC_LEN + ETHER_VLAN_ENCAP_LEN)) + sc->sc_flags |= CDCE_FLAG_VLAN; + error = usbd_req_get_string_any(uaa->device, NULL, eaddr_str, sizeof(eaddr_str), ued->iMacAddress); } - /* - * ECM 1.2 doesn't say it excludes the CRC, but states that it's - * normally 1514, which excludes the CRC. - */ - DPRINTF("max segsize: %d\n", UGETW(ued->wMaxSegmentSize)); - if (UGETW(ued->wMaxSegmentSize) >= (ETHER_MAX_LEN - ETHER_CRC_LEN + ETHER_VLAN_ENCAP_LEN)) - sc->sc_flags |= CDCE_FLAG_VLAN; - if (error) { /* fake MAC address */ |