Page MenuHomeFreeBSD

D57199.diff
No OneTemporary

D57199.diff

diff --git a/sys/dev/usb/usb_parse.c b/sys/dev/usb/usb_parse.c
--- a/sys/dev/usb/usb_parse.c
+++ b/sys/dev/usb/usb_parse.c
@@ -315,3 +315,27 @@
}
return (n);
}
+
+struct usb_bos_cap_descriptor *
+usbd_bos_foreach(struct usb_bos_descriptor *bos,
+ struct usb_bos_cap_descriptor *cap)
+{
+ /*
+ * No capabilility
+ */
+ if (bos == NULL || (bos->bLength >= UGETW(bos->wTotalLength)))
+ return (NULL);
+
+ if (cap == NULL)
+ return (struct usb_bos_cap_descriptor *)((uint8_t *)bos +
+ bos->bLength);
+
+ if (cap->bLength < sizeof(*cap))
+ return (NULL);
+
+ if (UGETW(bos->wTotalLength) <=
+ (uint8_t *)cap - (uint8_t *)bos + cap->bLength)
+ return (NULL);
+
+ return (struct usb_bos_cap_descriptor *)((uint8_t *)cap + cap->bLength);
+}
diff --git a/sys/dev/usb/usbdi_util.h b/sys/dev/usb/usbdi_util.h
--- a/sys/dev/usb/usbdi_util.h
+++ b/sys/dev/usb/usbdi_util.h
@@ -54,6 +54,8 @@
struct usb_endpoint_ss_comp_descriptor *usb_ed_comp_foreach(
struct usb_config_descriptor *cd,
struct usb_endpoint_ss_comp_descriptor *ped);
+struct usb_bos_cap_descriptor *usbd_bos_foreach(struct usb_bos_descriptor *bos,
+ struct usb_bos_cap_descriptor *cap);
uint8_t usbd_get_no_descriptors(struct usb_config_descriptor *cd,
uint8_t type);
uint8_t usbd_get_no_alts(struct usb_config_descriptor *cd,

File Metadata

Mime Type
text/plain
Expires
Sun, May 24, 6:31 PM (8 h, 37 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33482701
Default Alt Text
D57199.diff (1 KB)

Event Timeline