| From 97cd8dc4ca9a1a5efb2cc38758e01492e3b013e2 Mon Sep 17 00:00:00 2001 |
| From: Alon Ziv <alon+git@nolaviz.org> |
| Date: Sun, 10 Oct 2010 08:32:18 +0200 |
| Subject: USB: opticon: Fix long-standing bugs in opticon driver |
| |
| From: Alon Ziv <alon+git@nolaviz.org> |
| |
| commit 97cd8dc4ca9a1a5efb2cc38758e01492e3b013e2 upstream. |
| |
| The bulk-read callback had two bugs: |
| a) The bulk-in packet's leading two zeros were returned (and the two last |
| bytes truncated) |
| b) The wrong URB was transmitted for the second (and later) read requests, |
| causing further reads to return the entire packet (including leading |
| zeros) |
| |
| Signed-off-by: Alon Ziv <alon-git@nolaviz.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/usb/serial/opticon.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/usb/serial/opticon.c |
| +++ b/drivers/usb/serial/opticon.c |
| @@ -99,8 +99,8 @@ static void opticon_bulk_callback(struct |
| available_room = tty_buffer_request_room(tty, |
| data_length); |
| if (available_room) { |
| - tty_insert_flip_string(tty, data, |
| - available_room); |
| + tty_insert_flip_string(tty, data + 2, |
| + data_length); |
| tty_flip_buffer_push(tty); |
| } |
| tty_kref_put(tty); |
| @@ -134,7 +134,7 @@ exit: |
| priv->bulk_address), |
| priv->bulk_in_buffer, priv->buffer_size, |
| opticon_bulk_callback, priv); |
| - result = usb_submit_urb(port->read_urb, GFP_ATOMIC); |
| + result = usb_submit_urb(priv->bulk_read_urb, GFP_ATOMIC); |
| if (result) |
| dev_err(&port->dev, |
| "%s - failed resubmitting read urb, error %d\n", |