USB: io_ti, stop dereferencing potential NULL
authorJiri Slaby <jslaby@suse.cz>
Thu, 4 Apr 2013 20:41:01 +0000 (22:41 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 5 Apr 2013 22:38:30 +0000 (15:38 -0700)
tty_port_tty_get might return a tty which is NULL. But it is
dereferenced unconditionally in edge_send. Stop dereferencing that by
sending usb_serial_port pointer around.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/serial/io_ti.c

index 0ccc4225d593cab86b79a1894dd1b99bddcc4118..f2a1601775b10c981bf3b0e2ce3b9d20fce78f81 100644 (file)
@@ -206,7 +206,7 @@ static int restart_read(struct edgeport_port *edge_port);
 
 static void edge_set_termios(struct tty_struct *tty,
                struct usb_serial_port *port, struct ktermios *old_termios);
-static void edge_send(struct tty_struct *tty);
+static void edge_send(struct usb_serial_port *port, struct tty_struct *tty);
 
 /* sysfs attributes */
 static int edge_create_sysfs_attrs(struct usb_serial_port *port);
@@ -1712,7 +1712,7 @@ static void edge_bulk_out_callback(struct urb *urb)
 
        /* send any buffered data */
        tty = tty_port_tty_get(&port->port);
-       edge_send(tty);
+       edge_send(port, tty);
        tty_kref_put(tty);
 }
 
@@ -1940,14 +1940,13 @@ static int edge_write(struct tty_struct *tty, struct usb_serial_port *port,
 
        count = kfifo_in_locked(&edge_port->write_fifo, data, count,
                                                        &edge_port->ep_lock);
-       edge_send(tty);
+       edge_send(port, tty);
 
        return count;
 }
 
-static void edge_send(struct tty_struct *tty)
+static void edge_send(struct usb_serial_port *port, struct tty_struct *tty)
 {
-       struct usb_serial_port *port = tty->driver_data;
        int count, result;
        struct edgeport_port *edge_port = usb_get_serial_port_data(port);
        unsigned long flags;