summaryrefslogtreecommitdiffstats
path: root/third_party
diff options
context:
space:
mode:
Diffstat (limited to 'third_party')
-rw-r--r--third_party/libusb/README.chromium1
-rw-r--r--third_party/libusb/assign-endpoints-checks.patch17
-rw-r--r--third_party/libusb/src/libusb/os/windows_usb.c6
3 files changed, 24 insertions, 0 deletions
diff --git a/third_party/libusb/README.chromium b/third_party/libusb/README.chromium
index fc81c05..e74344c 100644
--- a/third_party/libusb/README.chromium
+++ b/third_party/libusb/README.chromium
@@ -19,3 +19,4 @@ Local Modifications:
- upstream-tick147.patch has been applied.
- linux-udev.patch has been applied.
- composite-hid-close.patch has been applied.
+- assign-endpoints-checks.patch has been applied. \ No newline at end of file
diff --git a/third_party/libusb/assign-endpoints-checks.patch b/third_party/libusb/assign-endpoints-checks.patch
new file mode 100644
index 0000000..7ed09bd
--- /dev/null
+++ b/third_party/libusb/assign-endpoints-checks.patch
@@ -0,0 +1,17 @@
+diff --git a/third_party/libusb/src/libusb/os/windows_usb.c b/third_party/libusb/src/libusb/os/windows_usb.c
+index 259897e..4469992 100644
+--- a/third_party/libusb/src/libusb/os/windows_usb.c
++++ b/third_party/libusb/src/libusb/os/windows_usb.c
+@@ -663,6 +663,12 @@ static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int
+ return r;
+ }
+
++ if (iface >= conf_desc->bNumInterfaces ||
++ altsetting >= conf_desc->interface[iface].num_altsetting) {
++ usbi_dbg("interface %d, altsetting %d out of range", iface, altsetting);
++ return LIBUSB_ERROR_INVALID_PARAM;
++ }
++
+ if_desc = &conf_desc->interface[iface].altsetting[altsetting];
+ safe_free(priv->usb_interface[iface].endpoint);
+
diff --git a/third_party/libusb/src/libusb/os/windows_usb.c b/third_party/libusb/src/libusb/os/windows_usb.c
index 259897e..4469992 100644
--- a/third_party/libusb/src/libusb/os/windows_usb.c
+++ b/third_party/libusb/src/libusb/os/windows_usb.c
@@ -663,6 +663,12 @@ static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int
return r;
}
+ if (iface >= conf_desc->bNumInterfaces ||
+ altsetting >= conf_desc->interface[iface].num_altsetting) {
+ usbi_dbg("interface %d, altsetting %d out of range", iface, altsetting);
+ return LIBUSB_ERROR_INVALID_PARAM;
+ }
+
if_desc = &conf_desc->interface[iface].altsetting[altsetting];
safe_free(priv->usb_interface[iface].endpoint);