Commit cd4d7373 authored by Oliver Neukum's avatar Oliver Neukum Committed by Jiri Slaby

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 avatarJiri Slaby <jslaby@suse.cz>
parent f9dbb366
...@@ -1253,8 +1253,27 @@ static int digi_port_init(struct usb_serial_port *port, unsigned port_num) ...@@ -1253,8 +1253,27 @@ static int digi_port_init(struct usb_serial_port *port, unsigned port_num)
static int digi_startup(struct usb_serial *serial) static int digi_startup(struct usb_serial *serial)
{ {
struct device *dev = &serial->interface->dev;
struct digi_serial *serial_priv; struct digi_serial *serial_priv;
int ret; int ret;
int i;
/* 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;
}
}
serial_priv = kzalloc(sizeof(*serial_priv), GFP_KERNEL); serial_priv = kzalloc(sizeof(*serial_priv), GFP_KERNEL);
if (!serial_priv) if (!serial_priv)
......
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