From: Greg Kroah-Hartman Date: Sat, 4 Dec 2010 00:14:49 +0000 (-0800) Subject: .32 patches X-Git-Tag: v2.6.27.57~53 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b6d7c1c0a7bb652edd793d42f9eb5a6657929e7c;p=thirdparty%2Fkernel%2Fstable-queue.git .32 patches --- diff --git a/queue-2.6.32/series b/queue-2.6.32/series index e70088cf3fc..a7520461118 100644 --- a/queue-2.6.32/series +++ b/queue-2.6.32/series @@ -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 index 00000000000..fb48248b3fe --- /dev/null +++ b/queue-2.6.32/tty-ldisc-fix-open-flag-handling.patch @@ -0,0 +1,56 @@ +From 7f90cfc505d613f4faf096e0d84ffe99208057d9 Mon Sep 17 00:00:00 2001 +From: Jiri Slaby +Date: Thu, 25 Nov 2010 00:27:54 +0100 +Subject: TTY: ldisc, fix open flag handling + +From: Jiri Slaby + +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: + [] ? warn_slowpath_common+0x5e/0x8a + [] ? warn_slowpath_null+0xa/0xc + [] ? tty_ldisc_open+0x26/0x38 + [] ? 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 +Cc: Alan Cox +Reported-by: Sergey Lapin +Tested-by: Sergey Lapin +Signed-off-by: Greg Kroah-Hartman + +--- + 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; + } +