diff options
Diffstat (limited to 'third_party')
-rw-r--r-- | third_party/libusb/README.chromium | 1 | ||||
-rw-r--r-- | third_party/libusb/assign-endpoints-checks.patch | 17 | ||||
-rw-r--r-- | third_party/libusb/src/libusb/os/windows_usb.c | 6 |
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); |