diff options
author | Oliver Neukum <oneukum@suse.com> | 2016-03-31 12:04:24 -0400 |
---|---|---|
committer | Sasha Levin <sasha.levin@oracle.com> | 2016-04-20 01:03:42 -0400 |
commit | 4b8d00f5056e278b053ca183e15f4a8e48d79336 (patch) | |
tree | f8f2fe9b469f69514606d8a24b3926e138bd56e6 /drivers/usb | |
parent | 6b659bbd154edee7a34aedebc925dc611922e472 (diff) |
USB: mct_u232: add sanity checking in probe
[ Upstream commit 4e9a0b05257f29cf4b75f3209243ed71614d062e ]
An attack using the lack of sanity checking in probe is known. This
patch checks for the existence of a second port.
CVE-2016-3136
Signed-off-by: Oliver Neukum <ONeukum@suse.com>
CC: stable@vger.kernel.org
[johan: add error message ]
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/serial/mct_u232.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c index fd707d6a10e2..89726f702202 100644 --- a/drivers/usb/serial/mct_u232.c +++ b/drivers/usb/serial/mct_u232.c @@ -376,14 +376,21 @@ static void mct_u232_msr_to_state(struct usb_serial_port *port, static int mct_u232_port_probe(struct usb_serial_port *port) { + struct usb_serial *serial = port->serial; struct mct_u232_private *priv; + /* check first to simplify error handling */ + if (!serial->port[1] || !serial->port[1]->interrupt_in_urb) { + dev_err(&port->dev, "expected endpoint missing\n"); + return -ENODEV; + } + priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; /* Use second interrupt-in endpoint for reading. */ - priv->read_urb = port->serial->port[1]->interrupt_in_urb; + priv->read_urb = serial->port[1]->interrupt_in_urb; priv->read_urb->context = port; spin_lock_init(&priv->lock); |