]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.32 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Sat, 4 Dec 2010 00:14:49 +0000 (16:14 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sat, 4 Dec 2010 00:14:49 +0000 (16:14 -0800)
queue-2.6.32/series
queue-2.6.32/tty-ldisc-fix-open-flag-handling.patch [new file with mode: 0644]

index e70088cf3fcb14a38261bdcadd5b460373b7cb77..a752046111828c9a81bed30c88f1d2a6b2ededbe 100644 (file)
@@ -41,3 +41,4 @@ x86-amd-northbridge-verify-nb-s-node-is-online.patch
 tty-prevent-dos-in-the-flush_to_ldisc.patch
 tty-restore-tty_ldisc_wait_idle.patch
 tty_ldisc-fix-bug-on-hangup.patch
+tty-ldisc-fix-open-flag-handling.patch
diff --git a/queue-2.6.32/tty-ldisc-fix-open-flag-handling.patch b/queue-2.6.32/tty-ldisc-fix-open-flag-handling.patch
new file mode 100644 (file)
index 0000000..fb48248
--- /dev/null
@@ -0,0 +1,56 @@
+From 7f90cfc505d613f4faf096e0d84ffe99208057d9 Mon Sep 17 00:00:00 2001
+From: Jiri Slaby <jslaby@suse.cz>
+Date: Thu, 25 Nov 2010 00:27:54 +0100
+Subject: TTY: ldisc, fix open flag handling
+
+From: Jiri Slaby <jslaby@suse.cz>
+
+commit 7f90cfc505d613f4faf096e0d84ffe99208057d9 upstream.
+
+When a concrete ldisc open fails in tty_ldisc_open, we forget to clear
+TTY_LDISC_OPEN. This causes a false warning on the next ldisc open:
+WARNING: at drivers/char/tty_ldisc.c:445 tty_ldisc_open+0x26/0x38()
+Hardware name: System Product Name
+Modules linked in: ...
+Pid: 5251, comm: a.out Tainted: G        W  2.6.32-5-686 #1
+Call Trace:
+ [<c1030321>] ? warn_slowpath_common+0x5e/0x8a
+ [<c1030357>] ? warn_slowpath_null+0xa/0xc
+ [<c119311c>] ? tty_ldisc_open+0x26/0x38
+ [<c11936c5>] ? tty_set_ldisc+0x218/0x304
+...
+
+So clear the bit when failing...
+
+Introduced in c65c9bc3efa (tty: rewrite the ldisc locking) back in
+2.6.31-rc1.
+
+Signed-off-by: Jiri Slaby <jslaby@suse.cz>
+Cc: Alan Cox <alan@linux.intel.com>
+Reported-by: Sergey Lapin <slapin@ossfans.org>
+Tested-by: Sergey Lapin <slapin@ossfans.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/char/tty_ldisc.c |    9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+--- a/drivers/char/tty_ldisc.c
++++ b/drivers/char/tty_ldisc.c
+@@ -444,9 +444,14 @@ static void tty_set_termios_ldisc(struct
+ static int tty_ldisc_open(struct tty_struct *tty, struct tty_ldisc *ld)
+ {
++      int ret;
++
+       WARN_ON(test_and_set_bit(TTY_LDISC_OPEN, &tty->flags));
+-      if (ld->ops->open)
+-              return ld->ops->open(tty);
++      if (ld->ops->open) {
++              ret = ld->ops->open(tty);
++              if (ret)
++                      clear_bit(TTY_LDISC_OPEN, &tty->flags);
++      }
+       return 0;
+ }