]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 1 Jan 2018 13:56:25 +0000 (14:56 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 1 Jan 2018 13:56:25 +0000 (14:56 +0100)
added patches:
n_tty-fix-extproc-vs-icanon-interaction-with-tiocinq-aka-fionread.patch
tty-fix-tty_ldisc_receive_buf-documentation.patch

queue-4.14/n_tty-fix-extproc-vs-icanon-interaction-with-tiocinq-aka-fionread.patch [new file with mode: 0644]
queue-4.14/series
queue-4.14/tty-fix-tty_ldisc_receive_buf-documentation.patch [new file with mode: 0644]

diff --git a/queue-4.14/n_tty-fix-extproc-vs-icanon-interaction-with-tiocinq-aka-fionread.patch b/queue-4.14/n_tty-fix-extproc-vs-icanon-interaction-with-tiocinq-aka-fionread.patch
new file mode 100644 (file)
index 0000000..b2f9a50
--- /dev/null
@@ -0,0 +1,64 @@
+From 966031f340185eddd05affcf72b740549f056348 Mon Sep 17 00:00:00 2001
+From: Linus Torvalds <torvalds@linux-foundation.org>
+Date: Wed, 20 Dec 2017 17:57:06 -0800
+Subject: n_tty: fix EXTPROC vs ICANON interaction with TIOCINQ (aka FIONREAD)
+
+From: Linus Torvalds <torvalds@linux-foundation.org>
+
+commit 966031f340185eddd05affcf72b740549f056348 upstream.
+
+We added support for EXTPROC back in 2010 in commit 26df6d13406d ("tty:
+Add EXTPROC support for LINEMODE") and the intent was to allow it to
+override some (all?) ICANON behavior.  Quoting from that original commit
+message:
+
+         There is a new bit in the termios local flag word, EXTPROC.
+         When this bit is set, several aspects of the terminal driver
+         are disabled.  Input line editing, character echo, and mapping
+         of signals are all disabled.  This allows the telnetd to turn
+         off these functions when in linemode, but still keep track of
+         what state the user wants the terminal to be in.
+
+but the problem turns out that "several aspects of the terminal driver
+are disabled" is a bit ambiguous, and you can really confuse the n_tty
+layer by setting EXTPROC and then causing some of the ICANON invariants
+to no longer be maintained.
+
+This fixes at least one such case (TIOCINQ) becoming unhappy because of
+the confusion over whether ICANON really means ICANON when EXTPROC is set.
+
+This basically makes TIOCINQ match the case of read: if EXTPROC is set,
+we ignore ICANON.  Also, make sure to reset the ICANON state ie EXTPROC
+changes, not just if ICANON changes.
+
+Fixes: 26df6d13406d ("tty: Add EXTPROC support for LINEMODE")
+Reported-by: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
+Reported-by: syzkaller <syzkaller@googlegroups.com>
+Cc: Jiri Slaby <jslaby@suse.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/tty/n_tty.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/tty/n_tty.c
++++ b/drivers/tty/n_tty.c
+@@ -1764,7 +1764,7 @@ static void n_tty_set_termios(struct tty
+ {
+       struct n_tty_data *ldata = tty->disc_data;
+-      if (!old || (old->c_lflag ^ tty->termios.c_lflag) & ICANON) {
++      if (!old || (old->c_lflag ^ tty->termios.c_lflag) & (ICANON | EXTPROC)) {
+               bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE);
+               ldata->line_start = ldata->read_tail;
+               if (!L_ICANON(tty) || !read_cnt(ldata)) {
+@@ -2427,7 +2427,7 @@ static int n_tty_ioctl(struct tty_struct
+               return put_user(tty_chars_in_buffer(tty), (int __user *) arg);
+       case TIOCINQ:
+               down_write(&tty->termios_rwsem);
+-              if (L_ICANON(tty))
++              if (L_ICANON(tty) && !L_EXTPROC(tty))
+                       retval = inq_canon(ldata);
+               else
+                       retval = read_cnt(ldata);
index e05655a93c7695845e91841f1a81bc480cc5998b..da5fa00767fdf4ead6d90f6322b8c213b706ccae 100644 (file)
@@ -142,3 +142,5 @@ x86-32-fix-kexec-with-stack-canary-config_cc_stackprotector.patch
 x86-espfix-64-fix-espfix-double-fault-handling-on-5-level-systems.patch
 x86-ldt-plug-memory-leak-in-error-path.patch
 x86-ldt-make-ldt-pgtable-free-conditional.patch
+n_tty-fix-extproc-vs-icanon-interaction-with-tiocinq-aka-fionread.patch
+tty-fix-tty_ldisc_receive_buf-documentation.patch
diff --git a/queue-4.14/tty-fix-tty_ldisc_receive_buf-documentation.patch b/queue-4.14/tty-fix-tty_ldisc_receive_buf-documentation.patch
new file mode 100644 (file)
index 0000000..c5d1d39
--- /dev/null
@@ -0,0 +1,31 @@
+From e7e51dcf3b8a5f65c5653a054ad57eb2492a90d0 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan@kernel.org>
+Date: Fri, 3 Nov 2017 15:18:05 +0100
+Subject: tty: fix tty_ldisc_receive_buf() documentation
+
+From: Johan Hovold <johan@kernel.org>
+
+commit e7e51dcf3b8a5f65c5653a054ad57eb2492a90d0 upstream.
+
+The tty_ldisc_receive_buf() helper returns the number of bytes
+processed so drop the bogus "not" from the kernel doc comment.
+
+Fixes: 8d082cd300ab ("tty: Unify receive_buf() code paths")
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/tty/tty_buffer.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/tty/tty_buffer.c
++++ b/drivers/tty/tty_buffer.c
+@@ -446,7 +446,7 @@ EXPORT_SYMBOL_GPL(tty_prepare_flip_strin
+  *    Callers other than flush_to_ldisc() need to exclude the kworker
+  *    from concurrent use of the line discipline, see paste_selection().
+  *
+- *    Returns the number of bytes not processed
++ *    Returns the number of bytes processed
+  */
+ int tty_ldisc_receive_buf(struct tty_ldisc *ld, const unsigned char *p,
+                         char *f, int count)