* [PATCH 0/2] USB: serial: whiteheat: fix slab corruption and endianness bug @ 2019-10-29 10:23 Johan Hovold 2019-10-29 10:23 ` [PATCH 1/2] USB: serial: whiteheat: fix potential slab corruption Johan Hovold 2019-10-29 10:23 ` [PATCH 2/2] USB: serial: whiteheat: fix line-speed endianness Johan Hovold 0 siblings, 2 replies; 3+ messages in thread From: Johan Hovold @ 2019-10-29 10:23 UTC (permalink / raw) To: Johan Hovold, Greg Kroah-Hartman; +Cc: linux-usb These patches fix a user-controlled slab buffer corruption, and adds a missing endianess conversion when setting the line speed. Greg, feel free to pick up the first one directly if you want. Johan Johan Hovold (2): USB: serial: whiteheat: fix potential slab corruption USB: serial: whiteheat: fix line-speed endianness drivers/usb/serial/whiteheat.c | 13 ++++++++++--- drivers/usb/serial/whiteheat.h | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) -- 2.23.0 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/2] USB: serial: whiteheat: fix potential slab corruption 2019-10-29 10:23 [PATCH 0/2] USB: serial: whiteheat: fix slab corruption and endianness bug Johan Hovold @ 2019-10-29 10:23 ` Johan Hovold 2019-10-29 10:23 ` [PATCH 2/2] USB: serial: whiteheat: fix line-speed endianness Johan Hovold 1 sibling, 0 replies; 3+ messages in thread From: Johan Hovold @ 2019-10-29 10:23 UTC (permalink / raw) To: Johan Hovold, Greg Kroah-Hartman; +Cc: linux-usb, stable Fix a user-controlled slab buffer overflow due to a missing sanity check on the bulk-out transfer buffer used for control requests. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Cc: stable <stable@vger.kernel.org> Signed-off-by: Johan Hovold <johan@kernel.org> --- drivers/usb/serial/whiteheat.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c index 79314d8c94a4..76cabcb30d21 100644 --- a/drivers/usb/serial/whiteheat.c +++ b/drivers/usb/serial/whiteheat.c @@ -559,6 +559,10 @@ static int firm_send_command(struct usb_serial_port *port, __u8 command, command_port = port->serial->port[COMMAND_PORT]; command_info = usb_get_serial_port_data(command_port); + + if (command_port->bulk_out_size < datasize + 1) + return -EIO; + mutex_lock(&command_info->mutex); command_info->command_finished = false; -- 2.23.0 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] USB: serial: whiteheat: fix line-speed endianness 2019-10-29 10:23 [PATCH 0/2] USB: serial: whiteheat: fix slab corruption and endianness bug Johan Hovold 2019-10-29 10:23 ` [PATCH 1/2] USB: serial: whiteheat: fix potential slab corruption Johan Hovold @ 2019-10-29 10:23 ` Johan Hovold 1 sibling, 0 replies; 3+ messages in thread From: Johan Hovold @ 2019-10-29 10:23 UTC (permalink / raw) To: Johan Hovold, Greg Kroah-Hartman; +Cc: linux-usb Add missing endianness conversion when setting the line speed so that this driver might work also on big-endian machines. Also use an unsigned format specifier in the corresponding debug message. Signed-off-by: Johan Hovold <johan@kernel.org> --- drivers/usb/serial/whiteheat.c | 9 ++++++--- drivers/usb/serial/whiteheat.h | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c index 76cabcb30d21..ca3bd58f2025 100644 --- a/drivers/usb/serial/whiteheat.c +++ b/drivers/usb/serial/whiteheat.c @@ -636,6 +636,7 @@ static void firm_setup_port(struct tty_struct *tty) struct device *dev = &port->dev; struct whiteheat_port_settings port_settings; unsigned int cflag = tty->termios.c_cflag; + speed_t baud; port_settings.port = port->port_number + 1; @@ -696,11 +697,13 @@ static void firm_setup_port(struct tty_struct *tty) dev_dbg(dev, "%s - XON = %2x, XOFF = %2x\n", __func__, port_settings.xon, port_settings.xoff); /* get the baud rate wanted */ - port_settings.baud = tty_get_baud_rate(tty); - dev_dbg(dev, "%s - baud rate = %d\n", __func__, port_settings.baud); + baud = tty_get_baud_rate(tty); + port_settings.baud = cpu_to_le32(baud); + dev_dbg(dev, "%s - baud rate = %u\n", __func__, baud); /* fixme: should set validated settings */ - tty_encode_baud_rate(tty, port_settings.baud, port_settings.baud); + tty_encode_baud_rate(tty, baud, baud); + /* handle any settings that aren't specified in the tty structure */ port_settings.lloop = 0; diff --git a/drivers/usb/serial/whiteheat.h b/drivers/usb/serial/whiteheat.h index 00398149cd8d..269e727a92f9 100644 --- a/drivers/usb/serial/whiteheat.h +++ b/drivers/usb/serial/whiteheat.h @@ -87,7 +87,7 @@ struct whiteheat_simple { struct whiteheat_port_settings { __u8 port; /* port number (1 to N) */ - __u32 baud; /* any value 7 - 460800, firmware calculates + __le32 baud; /* any value 7 - 460800, firmware calculates best fit; arrives little endian */ __u8 bits; /* 5, 6, 7, or 8 */ __u8 stop; /* 1 or 2, default 1 (2 = 1.5 if bits = 5) */ -- 2.23.0 ^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-10-29 10:26 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-10-29 10:23 [PATCH 0/2] USB: serial: whiteheat: fix slab corruption and endianness bug Johan Hovold 2019-10-29 10:23 ` [PATCH 1/2] USB: serial: whiteheat: fix potential slab corruption Johan Hovold 2019-10-29 10:23 ` [PATCH 2/2] USB: serial: whiteheat: fix line-speed endianness Johan Hovold
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).