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

index 4e25c6eab7b64857297f35ba94c43f82de14113b..fbbbd0f1f90d5d9e735b9ee3978de182d6885a12 100644 (file)
@@ -132,3 +132,4 @@ md-fix-return-value-of-rdev_size_change.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.33/tty-ldisc-fix-open-flag-handling.patch b/queue-2.6.33/tty-ldisc-fix-open-flag-handling.patch
new file mode 100644 (file)
index 0000000..af6acd2
--- /dev/null
@@ -0,0 +1,48 @@
+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 |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/char/tty_ldisc.c
++++ b/drivers/char/tty_ldisc.c
+@@ -452,6 +452,8 @@ static int tty_ldisc_open(struct tty_str
+                 /* BKL here locks verus a hangup event */
+               lock_kernel();
+               ret = ld->ops->open(tty);
++              if (ret)
++                      clear_bit(TTY_LDISC_OPEN, &tty->flags);
+               unlock_kernel();
+               return ret;
+       }