USB: serial: ftdi_sio: fix latency-timer error handling
authorJohan Hovold <johan@kernel.org>
Thu, 12 Jan 2017 13:56:12 +0000 (14:56 +0100)
committerSasha Levin <alexander.levin@verizon.com>
Tue, 13 Jun 2017 13:29:20 +0000 (09:29 -0400)
[ Upstream commit e3e574ad85a208cb179f33720bb5f12b453de33c ]

Make sure to detect short responses when reading the latency timer to
avoid using stale buffer data.

Note that no heap data would currently leak through sysfs as
ASYNC_LOW_LATENCY is set by default.

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: Sasha Levin <alexander.levin@verizon.com>
drivers/usb/serial/ftdi_sio.c

index def049f1810e3abec6ff497eb51798b8f9838d28..252f580cf3e7f27cbf303b8cddb3133639896720 100644 (file)
@@ -1438,10 +1438,13 @@ static int read_latency_timer(struct usb_serial_port *port)
                             FTDI_SIO_GET_LATENCY_TIMER_REQUEST_TYPE,
                             0, priv->interface,
                             buf, 1, WDR_TIMEOUT);
-       if (rv < 0)
+       if (rv < 1) {
                dev_err(&port->dev, "Unable to read latency timer: %i\n", rv);
-       else
+               if (rv >= 0)
+                       rv = -EIO;
+       } else {
                priv->latency = buf[0];
+       }
 
        kfree(buf);