| From f2950b78547ffb8475297ada6b92bc2d774d5461 Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Fri, 6 Jan 2017 19:15:13 +0100 |
| Subject: USB: serial: ch341: fix open error handling |
| |
| From: Johan Hovold <johan@kernel.org> |
| |
| commit f2950b78547ffb8475297ada6b92bc2d774d5461 upstream. |
| |
| Make sure to stop the interrupt URB before returning on errors during |
| open. |
| |
| Fixes: 664d5df92e88 ("USB: usb-serial ch341: support for DTR/RTS/CTS") |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/serial/ch341.c | 13 ++++++++++--- |
| 1 file changed, 10 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/usb/serial/ch341.c |
| +++ b/drivers/usb/serial/ch341.c |
| @@ -314,7 +314,7 @@ static int ch341_open(struct tty_struct |
| |
| r = ch341_configure(serial->dev, priv); |
| if (r) |
| - goto out; |
| + return r; |
| |
| if (tty) |
| ch341_set_termios(tty, port, NULL); |
| @@ -324,12 +324,19 @@ static int ch341_open(struct tty_struct |
| if (r) { |
| dev_err(&port->dev, "%s - failed to submit interrupt urb: %d\n", |
| __func__, r); |
| - goto out; |
| + return r; |
| } |
| |
| r = usb_serial_generic_open(tty, port); |
| + if (r) |
| + goto err_kill_interrupt_urb; |
| + |
| + return 0; |
| + |
| +err_kill_interrupt_urb: |
| + usb_kill_urb(port->interrupt_in_urb); |
| |
| -out: return r; |
| + return r; |
| } |
| |
| /* Old_termios contains the original termios settings and |