diff options
author | Johan Hovold <johan@kernel.org> | 2017-01-12 14:56:12 +0100 |
---|---|---|
committer | Sasha Levin <alexander.levin@verizon.com> | 2017-06-13 09:29:20 -0400 |
commit | e2eaebce9d2051e1efedb893a211f09e52707463 (patch) | |
tree | 8a4febf73e1fb19ac584138a1fb14840da41438b | |
parent | e7ccc604153b11628528466fb3906c8453319fec (diff) |
USB: serial: ftdi_sio: fix latency-timer error handling
[ 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>
-rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index def049f1810e..252f580cf3e7 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c @@ -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); |