Skip to content

Commit

Permalink
keyspan: init termios properly
Browse files Browse the repository at this point in the history
Remove redundant code leading to NULL ptr deref and let terminal config
settings take place in the proper initialization path in
usb_console_setup().

Signed-off-by: Borislav Petkov <bbpetkov@yahoo.de>
Cc: <lucy@keyspan.com>
Cc: Greg KH <greg@kroah.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Borislav Petkov authored and Linus Torvalds committed Nov 15, 2007
1 parent 5bfeca3 commit 7eea436
Showing 1 changed file with 6 additions and 32 deletions.
38 changes: 6 additions & 32 deletions drivers/usb/serial/keyspan.c
Original file line number Diff line number Diff line change
Expand Up @@ -1215,20 +1215,18 @@ static int keyspan_chars_in_buffer (struct usb_serial_port *port)

static int keyspan_open (struct usb_serial_port *port, struct file *filp)
{
struct keyspan_port_private *p_priv;
struct keyspan_serial_private *s_priv;
struct usb_serial *serial = port->serial;
struct keyspan_port_private *p_priv;
struct keyspan_serial_private *s_priv;
struct usb_serial *serial = port->serial;
const struct keyspan_device_details *d_details;
int i, err;
int baud_rate, device_port;
struct urb *urb;
unsigned int cflag;

s_priv = usb_get_serial_data(serial);
p_priv = usb_get_serial_port_data(port);
d_details = p_priv->device_details;
dbg("%s - port%d.", __FUNCTION__, port->number);

dbg("%s - port%d.", __FUNCTION__, port->number);

/* Set some sane defaults */
p_priv->rts_state = 1;
Expand All @@ -1249,7 +1247,7 @@ static int keyspan_open (struct usb_serial_port *port, struct file *filp)
urb->dev = serial->dev;

/* make sure endpoint data toggle is synchronized with the device */

usb_clear_halt(urb->dev, urb->pipe);

if ((err = usb_submit_urb(urb, GFP_KERNEL)) != 0) {
Expand All @@ -1265,30 +1263,6 @@ static int keyspan_open (struct usb_serial_port *port, struct file *filp)
/* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe), 0); */
}

/* get the terminal config for the setup message now so we don't
* need to send 2 of them */

cflag = port->tty->termios->c_cflag;
device_port = port->number - port->serial->minor;

/* Baud rate calculation takes baud rate as an integer
so other rates can be generated if desired. */
baud_rate = tty_get_baud_rate(port->tty);
/* If no match or invalid, leave as default */
if (baud_rate >= 0
&& d_details->calculate_baud_rate(baud_rate, d_details->baudclk,
NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
p_priv->baud = baud_rate;
}

/* set CTS/RTS handshake etc. */
p_priv->cflag = cflag;
p_priv->flow_control = (cflag & CRTSCTS)? flow_cts: flow_none;

keyspan_send_setup(port, 1);
//mdelay(100);
//keyspan_set_termios(port, NULL);

return (0);
}

Expand Down

0 comments on commit 7eea436

Please sign in to comment.