| From aec9215f400270a666d50ac0a38dae94088fd625 Mon Sep 17 00:00:00 2001 |
| From: Pan Bian <bianpan2016@163.com> |
| Date: Tue, 29 Nov 2016 16:55:02 +0100 |
| Subject: [PATCH] USB: serial: kl5kusb105: abort on open exception path |
| |
| commit 3c3dd1e058cb01e835dcade4b54a6f13ffaeaf7c upstream. |
| |
| Function klsi_105_open() calls usb_control_msg() (to "enable read") and |
| checks its return value. When the return value is unexpected, it only |
| assigns the error code to the return variable retval, but does not |
| terminate the exception path. This patch fixes the bug by inserting |
| "goto err_generic_close;" when the call to usb_control_msg() fails. |
| |
| Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") |
| Signed-off-by: Pan Bian <bianpan2016@163.com> |
| [johan: rebase on prerequisite fix and amend commit message] |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/usb/serial/kl5kusb105.c b/drivers/usb/serial/kl5kusb105.c |
| index 6f29bfadbe33..0ee190fc1bf8 100644 |
| --- a/drivers/usb/serial/kl5kusb105.c |
| +++ b/drivers/usb/serial/kl5kusb105.c |
| @@ -311,6 +311,7 @@ static int klsi_105_open(struct tty_struct *tty, struct usb_serial_port *port) |
| if (rc < 0) { |
| dev_err(&port->dev, "Enabling read failed (error = %d)\n", rc); |
| retval = rc; |
| + goto err_generic_close; |
| } else |
| dev_dbg(&port->dev, "%s - enabled reading\n", __func__); |
| |
| @@ -337,6 +338,7 @@ err_disable_read: |
| 0, /* index */ |
| NULL, 0, |
| KLSI_TIMEOUT); |
| +err_generic_close: |
| usb_serial_generic_close(port); |
| err_free_cfg: |
| kfree(cfg); |
| -- |
| 2.10.1 |
| |