aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>2006-04-13 16:27:12 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2006-06-21 18:04:09 -0400
commit57845bd104233cb75b9ab3624f7ea7662298bc27 (patch)
tree73ac01088881aa217b07c79a781b7c4412ea85e4 /drivers
parentc10746dbb39d41e5fc27badfebe61448210c426d (diff)
[PATCH] USB: console: fix oops
Prevent NULL dereference when used as a USB-serial console. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/serial/ftdi_sio.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index 986d7622273d..1122a0da41c1 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -1261,7 +1261,6 @@ static void ftdi_shutdown (struct usb_serial *serial)
1261 1261
1262static int ftdi_open (struct usb_serial_port *port, struct file *filp) 1262static int ftdi_open (struct usb_serial_port *port, struct file *filp)
1263{ /* ftdi_open */ 1263{ /* ftdi_open */
1264 struct termios tmp_termios;
1265 struct usb_device *dev = port->serial->dev; 1264 struct usb_device *dev = port->serial->dev;
1266 struct ftdi_private *priv = usb_get_serial_port_data(port); 1265 struct ftdi_private *priv = usb_get_serial_port_data(port);
1267 unsigned long flags; 1266 unsigned long flags;
@@ -1271,8 +1270,8 @@ static int ftdi_open (struct usb_serial_port *port, struct file *filp)
1271 1270
1272 dbg("%s", __FUNCTION__); 1271 dbg("%s", __FUNCTION__);
1273 1272
1274 1273 if (port->tty)
1275 port->tty->low_latency = (priv->flags & ASYNC_LOW_LATENCY) ? 1 : 0; 1274 port->tty->low_latency = (priv->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
1276 1275
1277 /* No error checking for this (will get errors later anyway) */ 1276 /* No error checking for this (will get errors later anyway) */
1278 /* See ftdi_sio.h for description of what is reset */ 1277 /* See ftdi_sio.h for description of what is reset */
@@ -1286,7 +1285,8 @@ static int ftdi_open (struct usb_serial_port *port, struct file *filp)
1286 This is same behaviour as serial.c/rs_open() - Kuba */ 1285 This is same behaviour as serial.c/rs_open() - Kuba */
1287 1286
1288 /* ftdi_set_termios will send usb control messages */ 1287 /* ftdi_set_termios will send usb control messages */
1289 ftdi_set_termios(port, &tmp_termios); 1288 if (port->tty)
1289 ftdi_set_termios(port, NULL);
1290 1290
1291 /* FIXME: Flow control might be enabled, so it should be checked - 1291 /* FIXME: Flow control might be enabled, so it should be checked -
1292 we have no control of defaults! */ 1292 we have no control of defaults! */
@@ -1867,7 +1867,7 @@ static void ftdi_set_termios (struct usb_serial_port *port, struct termios *old_
1867 err("%s urb failed to set baudrate", __FUNCTION__); 1867 err("%s urb failed to set baudrate", __FUNCTION__);
1868 } 1868 }
1869 /* Ensure RTS and DTR are raised when baudrate changed from 0 */ 1869 /* Ensure RTS and DTR are raised when baudrate changed from 0 */
1870 if ((old_termios->c_cflag & CBAUD) == B0) { 1870 if (!old_termios || (old_termios->c_cflag & CBAUD) == B0) {
1871 set_mctrl(port, TIOCM_DTR | TIOCM_RTS); 1871 set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
1872 } 1872 }
1873 } 1873 }