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

Make sure to detect short control-message transfers so that errors are
logged when reading the modem status at open.

Note that while this also avoids initialising the modem status using
uninitialised heap data, these bits could not leak to user space as they
are currently not used.

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/mct_u232.c

index 1c9ff791a6fe09e303b305dd21c217dccce6289e..a6c07c6be25f8418ad5a8d7776937444c3568532 100644 (file)
@@ -322,8 +322,12 @@ static int mct_u232_get_modem_stat(struct usb_serial_port *port,
                        MCT_U232_GET_REQUEST_TYPE,
                        0, 0, buf, MCT_U232_GET_MODEM_STAT_SIZE,
                        WDR_TIMEOUT);
-       if (rc < 0) {
+       if (rc < MCT_U232_GET_MODEM_STAT_SIZE) {
                dev_err(&port->dev, "Get MODEM STATus failed (error = %d)\n", rc);
+
+               if (rc >= 0)
+                       rc = -EIO;
+
                *msr = 0;
        } else {
                *msr = buf[0];