patch "USB: serial: omninet: fix NULL-derefs at open and disconnect" added to usb-linus
Subsystems (3)
This is a note to let you know that I've just added the patch titled
USB: serial: omninet: fix NULL-derefs at open and disconnect
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
Quoted 1 line
From
a5bc01949e3b19d8a23b5eabc6fc71bb50dc820eMon Sep 17 00:00:00 2001
From: Johan Hovold <[email protected]>
Date: Tue, 3 Jan 2017 16:39:58 +0100
Subject: USB: serial: omninet: fix NULL-derefs at open and disconnect
Fix NULL-pointer dereferences at open() and disconnect() should the device lack the expected bulk-out endpoints:
Unable to handle kernel NULL pointer dereference at virtual address 000000b4
...
[c0170ff0>] (__lock_acquire) from [<c0172f00>] (lock_acquire+0x108/0x264) [<c0172f00>] (lock_acquire) from [<c06a5090>] (_raw_spin_lock_irqsave+0x58/0x6c) [<c06a5090>] (_raw_spin_lock_irqsave) from [<c0470684>] (tty_port_tty_set+0x28/0xa4) [<c0470684>] (tty_port_tty_set) from [<bf08d384>] (omninet_open+0x30/0x40 [omninet]) [<bf08d384>] (omninet_open [omninet]) from [<bf07c118>] (serial_port_activate+0x68/0x98 [usbserial])
Unable to handle kernel NULL pointer dereference at virtual address 00000234
...
[<bf01f418>] (omninet_disconnect [omninet]) from [<bf0016c0>] (usb_serial_disconnect+0xe4/0x100 [usbserial])
--- drivers/usb/serial/omninet.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
drivers/usb/serial/omninet.c +13 -0
@@ -38,6 +38,7 @@ static int omninet_write(struct tty_struct *tty, struct usb_serial_port *port, const unsigned char *buf, int count);static int omninet_write_room (struct tty_struct *tty);static void omninet_disconnect (struct usb_serial *serial); +static int omninet_attach (struct usb_serial *serial);static int omninet_port_probe (struct usb_serial_port *port);static int omninet_port_remove (struct usb_serial_port *port);
@@ -56,6 +57,7 @@ static struct usb_serial_driver zyxel_omninet_device = { .description = "ZyXEL - omni.net lcd plus usb", .id_table = id_table, .num_ports = 1, + .attach = omninet_attach, .port_probe = omninet_port_probe, .port_remove = omninet_port_remove, .open = omninet_open,
@@ -104,6 +106,17 @@ struct omninet_data {__u8 od_outseq;/* Sequence number for bulk_out URBs */ }; +static int omninet_attach (struct usb_serial *serial) +{ +/* The second bulk-out endpoint is used for writing. */ +if (serial->num_bulk_out <2 ) { +dev_err (&serial->interface->dev,"missing endpoints\n" ); +return -ENODEV ; + } + +return 0 ; +} +static int omninet_port_probe (struct usb_serial_port *port) {struct omninet_data *od;
Signature · 1 line
2.11.0