Commit 38670829 authored by Oliver Neukum's avatar Oliver Neukum Committed by Ben Hutchings

USB: digi_acceleport: do sanity checking for the number of ports

commit 5a07975a upstream.

The driver can be crashed with devices that expose crafted descriptors
with too few endpoints.

See: http://seclists.org/bugtraq/2016/Mar/61Signed-off-by: default avatarOliver Neukum <ONeukum@suse.com>
[johan: fix OOB endpoint check and add error messages ]
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
[bwh: Backported to 3.2: adjust context]
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
parent 2f974f8d
...@@ -1489,12 +1489,30 @@ static int digi_startup_device(struct usb_serial *serial) ...@@ -1489,12 +1489,30 @@ static int digi_startup_device(struct usb_serial *serial)
static int digi_startup(struct usb_serial *serial) static int digi_startup(struct usb_serial *serial)
{ {
struct device *dev = &serial->interface->dev;
int i; int i;
struct digi_port *priv; struct digi_port *priv;
struct digi_serial *serial_priv; struct digi_serial *serial_priv;
dbg("digi_startup: TOP"); dbg("digi_startup: TOP");
/* check whether the device has the expected number of endpoints */
if (serial->num_port_pointers < serial->type->num_ports + 1) {
dev_err(dev, "OOB endpoints missing\n");
return -ENODEV;
}
for (i = 0; i < serial->type->num_ports + 1 ; i++) {
if (!serial->port[i]->read_urb) {
dev_err(dev, "bulk-in endpoint missing\n");
return -ENODEV;
}
if (!serial->port[i]->write_urb) {
dev_err(dev, "bulk-out endpoint missing\n");
return -ENODEV;
}
}
/* allocate the private data structures for all ports */ /* allocate the private data structures for all ports */
/* number of regular ports + 1 for the out-of-band port */ /* number of regular ports + 1 for the out-of-band port */
for (i = 0; i < serial->type->num_ports + 1; i++) { for (i = 0; i < serial->type->num_ports + 1; i++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment