| From 146cc8a17a3b4996f6805ee5c080e7101277c410 Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Tue, 10 Jan 2017 12:05:37 +0100 |
| Subject: USB: serial: kl5kusb105: fix line-state error handling |
| |
| From: Johan Hovold <johan@kernel.org> |
| |
| commit 146cc8a17a3b4996f6805ee5c080e7101277c410 upstream. |
| |
| The current implementation failed to detect short transfers when |
| attempting to read the line state, and also, to make things worse, |
| logged the content of the uninitialised heap transfer buffer. |
| |
| Fixes: abf492e7b3ae ("USB: kl5kusb105: fix DMA buffers on stack") |
| Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") |
| Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/serial/kl5kusb105.c | 9 +++++---- |
| 1 file changed, 5 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/usb/serial/kl5kusb105.c |
| +++ b/drivers/usb/serial/kl5kusb105.c |
| @@ -192,10 +192,11 @@ static int klsi_105_get_line_state(struc |
| status_buf, KLSI_STATUSBUF_LEN, |
| 10000 |
| ); |
| - if (rc < 0) |
| - dev_err(&port->dev, "Reading line status failed (error = %d)\n", |
| - rc); |
| - else { |
| + if (rc != KLSI_STATUSBUF_LEN) { |
| + dev_err(&port->dev, "reading line status failed: %d\n", rc); |
| + if (rc >= 0) |
| + rc = -EIO; |
| + } else { |
| status = get_unaligned_le16(status_buf); |
| |
| dev_info(&port->serial->dev->dev, "read status %x %x\n", |