Skip to content

Commit

Permalink
USB: pl2303: fix abuse of interface data
Browse files Browse the repository at this point in the history
Fix abuse of interface data which was used to signal device disconnect.

Use the usb_serial disconnect flag and mutex where appropriate.

Note that tiocmget does not need to check for disconnect as it does not
access the device.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Johan Hovold authored and Greg Kroah-Hartman committed Apr 25, 2012
1 parent 1c51766 commit 6f1efd6
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions drivers/usb/serial/pl2303.c
Original file line number Diff line number Diff line change
Expand Up @@ -523,12 +523,11 @@ static int pl2303_tiocmset(struct tty_struct *tty,
unsigned int set, unsigned int clear)
{
struct usb_serial_port *port = tty->driver_data;
struct usb_serial *serial = port->serial;
struct pl2303_private *priv = usb_get_serial_port_data(port);
unsigned long flags;
u8 control;

if (!usb_get_intfdata(port->serial->interface))
return -ENODEV;
int ret;

spin_lock_irqsave(&priv->lock, flags);
if (set & TIOCM_RTS)
Expand All @@ -542,7 +541,14 @@ static int pl2303_tiocmset(struct tty_struct *tty,
control = priv->line_control;
spin_unlock_irqrestore(&priv->lock, flags);

return set_control_lines(port->serial->dev, control);
mutex_lock(&serial->disc_mutex);
if (!serial->disconnected)
ret = set_control_lines(serial->dev, control);
else
ret = -ENODEV;
mutex_unlock(&serial->disc_mutex);

return ret;
}

static int pl2303_tiocmget(struct tty_struct *tty)
Expand All @@ -556,9 +562,6 @@ static int pl2303_tiocmget(struct tty_struct *tty)

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

if (!usb_get_intfdata(port->serial->interface))
return -ENODEV;

spin_lock_irqsave(&priv->lock, flags);
mcr = priv->line_control;
status = priv->line_status;
Expand Down

0 comments on commit 6f1efd6

Please sign in to comment.