| From 2a45e50d76bb1cad375cbff251912ea7c9bde3a9 Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Tue, 3 Jan 2017 16:39:49 +0100 |
| Subject: [PATCH] USB: serial: kobil_sct: fix NULL-deref in write |
| |
| commit 21ce57840243c7b70fbc1ebd3dceeb70bb6e9e09 upstream. |
| |
| Fix NULL-pointer dereference in write() should the device lack the |
| expected interrupt-out endpoint: |
| |
| Unable to handle kernel NULL pointer dereference at virtual address 00000054 |
| ... |
| PC is at kobil_write+0x144/0x2a0 [kobil_sct] |
| |
| Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") |
| Cc: stable <stable@vger.kernel.org> |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c |
| index 2363654cafc9..813035f51fe7 100644 |
| --- a/drivers/usb/serial/kobil_sct.c |
| +++ b/drivers/usb/serial/kobil_sct.c |
| @@ -51,6 +51,7 @@ |
| |
| |
| /* Function prototypes */ |
| +static int kobil_attach(struct usb_serial *serial); |
| static int kobil_port_probe(struct usb_serial_port *probe); |
| static int kobil_port_remove(struct usb_serial_port *probe); |
| static int kobil_open(struct tty_struct *tty, struct usb_serial_port *port); |
| @@ -86,6 +87,7 @@ static struct usb_serial_driver kobil_device = { |
| .description = "KOBIL USB smart card terminal", |
| .id_table = id_table, |
| .num_ports = 1, |
| + .attach = kobil_attach, |
| .port_probe = kobil_port_probe, |
| .port_remove = kobil_port_remove, |
| .ioctl = kobil_ioctl, |
| @@ -113,6 +115,16 @@ struct kobil_private { |
| }; |
| |
| |
| +static int kobil_attach(struct usb_serial *serial) |
| +{ |
| + if (serial->num_interrupt_out < serial->num_ports) { |
| + dev_err(&serial->interface->dev, "missing interrupt-out endpoint\n"); |
| + return -ENODEV; |
| + } |
| + |
| + return 0; |
| +} |
| + |
| static int kobil_port_probe(struct usb_serial_port *port) |
| { |
| struct usb_serial *serial = port->serial; |
| -- |
| 2.10.1 |
| |