This is a note to let you know that I've just added the patch titled TTY: fix tty_wait_until_sent on 64-bit machines to the 3.19-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: tty-fix-tty_wait_until_sent-on-64-bit-machines.patch and it can be found in the queue-3.19 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 79fbf4a550ed6a22e1ae1516113e6c7fa5d56a53 Mon Sep 17 00:00:00 2001 From: Johan Hovold <johan@xxxxxxxxxx> Date: Wed, 4 Mar 2015 10:39:06 +0100 Subject: TTY: fix tty_wait_until_sent on 64-bit machines From: Johan Hovold <johan@xxxxxxxxxx> commit 79fbf4a550ed6a22e1ae1516113e6c7fa5d56a53 upstream. Fix overflow bug in tty_wait_until_sent on 64-bit machines, where an infinite timeout (0) would be passed to the underlying tty-driver's wait_until_sent-operation as a negative timeout (-1), causing it to return immediately. This manifests itself for example as tcdrain() returning immediately, drivers not honouring the drain flags when setting terminal attributes, or even dropped data on close as a requested infinite closing-wait timeout would be ignored. The first symptom was reported by Asier LLANO who noted that tcdrain() returned prematurely when using the ftdi_sio usb-serial driver. Fix this by passing 0 rather than MAX_SCHEDULE_TIMEOUT (LONG_MAX) to the underlying tty driver. Note that the serial-core wait_until_sent-implementation is not affected by this bug due to a lucky chance (comparison to an unsigned maximum timeout), and neither is the cyclades one that had an explicit check for negative timeouts, but all other tty drivers appear to be affected. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Reported-by: ZIV-Asier Llano Palacios <asier.llano@xxxxxxxxxxxx> Signed-off-by: Johan Hovold <johan@xxxxxxxxxx> Reviewed-by: Peter Hurley <peter@xxxxxxxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/tty/tty_ioctl.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) --- a/drivers/tty/tty_ioctl.c +++ b/drivers/tty/tty_ioctl.c @@ -217,11 +217,17 @@ void tty_wait_until_sent(struct tty_stru #endif if (!timeout) timeout = MAX_SCHEDULE_TIMEOUT; + if (wait_event_interruptible_timeout(tty->write_wait, - !tty_chars_in_buffer(tty), timeout) >= 0) { - if (tty->ops->wait_until_sent) - tty->ops->wait_until_sent(tty, timeout); + !tty_chars_in_buffer(tty), timeout) < 0) { + return; } + + if (timeout == MAX_SCHEDULE_TIMEOUT) + timeout = 0; + + if (tty->ops->wait_until_sent) + tty->ops->wait_until_sent(tty, timeout); } EXPORT_SYMBOL(tty_wait_until_sent); Patches currently in stable-queue which might be from johan@xxxxxxxxxx are queue-3.19/revert-usb-serial-make-bulk_out_size-a-lower-limit.patch queue-3.19/usb-serial-fix-infinite-wait_until_sent-timeout.patch queue-3.19/usb-serial-cp210x-adding-seletek-device-id-s.patch queue-3.19/tty-fix-tty_wait_until_sent-on-64-bit-machines.patch queue-3.19/usb-ftdi_sio-add-jtag-quirk-support-for-cyber-cortex-av-boards.patch queue-3.19/usb-mxuport-fix-null-deref-when-used-as-a-console.patch queue-3.19/usb-ftdi_sio-add-pids-for-actisense-usb-devices.patch queue-3.19/usb-serial-fix-potential-use-after-free-after-failed-probe.patch queue-3.19/net-irda-fix-wait_until_sent-poll-timeout.patch queue-3.19/usb-serial-fix-tty-device-error-handling-at-probe.patch -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html