| From fae648f8b2861e6c3a0452fdada5aa63ac9de217 Mon Sep 17 00:00:00 2001 |
| From: Alon Ziv <alon+git@nolaviz.org> |
| Date: Sun, 10 Oct 2010 08:32:18 +0200 |
| Subject: [PATCH] USB: opticon: Fix long-standing bugs in opticon driver |
| |
| 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> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| --- |
| drivers/usb/serial/opticon.c | 6 +++--- |
| 1 files changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/usb/serial/opticon.c b/drivers/usb/serial/opticon.c |
| index ed01f3b..9ff19c8 100644 |
| --- a/drivers/usb/serial/opticon.c |
| +++ b/drivers/usb/serial/opticon.c |
| @@ -96,8 +96,8 @@ static void opticon_bulk_callback(struct urb *urb) |
| /* real data, send it to the tty layer */ |
| tty = tty_port_tty_get(&port->port); |
| if (tty) { |
| - tty_insert_flip_string(tty, data, |
| - data_length); |
| + tty_insert_flip_string(tty, data + 2, |
| + data_length); |
| tty_flip_buffer_push(tty); |
| tty_kref_put(tty); |
| } |
| @@ -130,7 +130,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", |
| -- |
| 1.7.0.4 |
| |