USB: symbolserial: Correct transferred data size
authorPhilipp Hachtmann <hachti@hachti.de>
Mon, 17 Aug 2015 15:31:47 +0000 (17:31 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 18 Aug 2015 17:06:22 +0000 (10:06 -0700)
The scanner (here DS3508) always returns 64 bytes per urb buffer. The first
byte indicates the data length used in the current buffer. There even was
a comment describing this. But the comment also said that we'll send
everything in the buffer to the tty layer. That means sending the actual
barcode data and lots of trailing zeroes. This patch lets the driver only
send the real data.

Signed-off-by: Philipp Hachtmann <hachti@hachti.de>
Acked-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/serial/symbolserial.c

index 6ed804450a5a6a0a0a8e3f4584b420da94948d8c..37f3ad15ed06a5f6c1cf9db54ca0beef801d523f 100644 (file)
@@ -60,17 +60,15 @@ static void symbol_int_callback(struct urb *urb)
 
        usb_serial_debug_data(&port->dev, __func__, urb->actual_length, data);
 
+       /*
+        * Data from the device comes with a 1 byte header:
+        *
+        * <size of data> <data>...
+        */
        if (urb->actual_length > 1) {
-               data_length = urb->actual_length - 1;
-
-               /*
-                * Data from the device comes with a 1 byte header:
-                *
-                * <size of data>data...
-                *      This is real data to be sent to the tty layer
-                * we pretty much just ignore the size and send everything
-                * else to the tty layer.
-                */
+               data_length = data[0];
+               if (data_length > (urb->actual_length - 1))
+                       data_length = urb->actual_length - 1;
                tty_insert_flip_string(&port->port, &data[1], data_length);
                tty_flip_buffer_push(&port->port);
        } else {
This page took 0.02741 seconds and 5 git commands to generate.