summaryrefslogtreecommitdiffstats
path: root/third_party
diff options
context:
space:
mode:
authorreillyg <reillyg@chromium.org>2015-04-21 14:26:15 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-21 21:27:46 +0000
commit27b714610e07588bdf44101fce764672ef8bbb0c (patch)
treebd836a66548ceb831ccf843e0c4543927d1635f2 /third_party
parent569bc2306103c80b1d6e613c30339f69ad9329dd (diff)
downloadchromium_src-27b714610e07588bdf44101fce764672ef8bbb0c.zip
chromium_src-27b714610e07588bdf44101fce764672ef8bbb0c.tar.gz
chromium_src-27b714610e07588bdf44101fce764672ef8bbb0c.tar.bz2
libusb: Check interface and altsetting number are in range.
When assigning endpoints to interfaces check that the interface number and alternate setting number are within the ranges provided in the configuration descriptor. BUG=478857 Review URL: https://codereview.chromium.org/1050823008 Cr-Commit-Position: refs/heads/master@{#326125}
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);