| From: Pan Bian <bianpan2016@163.com> |
| Date: Tue, 29 Nov 2016 16:55:02 +0100 |
| Subject: 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: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/usb/serial/kl5kusb105.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/drivers/usb/serial/kl5kusb105.c |
| +++ b/drivers/usb/serial/kl5kusb105.c |
| @@ -315,6 +315,7 @@ static int klsi_105_open(struct tty_str |
| 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__); |
| |
| @@ -341,6 +342,7 @@ err_disable_read: |
| 0, /* index */ |
| NULL, 0, |
| KLSI_TIMEOUT); |
| +err_generic_close: |
| usb_serial_generic_close(port); |
| err_free_cfg: |
| kfree(cfg); |