summaryrefslogtreecommitdiffstats
path: root/drivers/char
diff options
context:
space:
mode:
authorAlan Cox <alan@redhat.com>2009-01-15 13:30:25 +0000
committerLinus Torvalds <torvalds@linux-foundation.org>2009-01-15 12:48:35 -0800
commitc0253eec2a8e1140dd9672a1efe095cdcf5811d0 (patch)
treec48dc5283ca4f01005295a97a28e532818aedce6 /drivers/char
parent5393f780277165f282a37ed82dd878159ec9dad5 (diff)
downloadlinux-c0253eec2a8e1140dd9672a1efe095cdcf5811d0.tar.gz
linux-c0253eec2a8e1140dd9672a1efe095cdcf5811d0.tar.bz2
linux-c0253eec2a8e1140dd9672a1efe095cdcf5811d0.zip
tty: Fix race in the flush for some ldiscs
If you issue an ioctl to flush a tty as the line discipline is changing or otherwise unplugged you can get a crash. The bug is very old but the rest of the BKL lock dropping and some very "good" luck on Ingo's part caught an example. Use the correct ldisc_ref form so that we wait for the ldisc change to complete and then flush Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/char')
-rw-r--r--drivers/char/tty_ioctl.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/char/tty_ioctl.c b/drivers/char/tty_ioctl.c
index a408c8e487ec..6f4c7d0a53bf 100644
--- a/drivers/char/tty_ioctl.c
+++ b/drivers/char/tty_ioctl.c
@@ -1057,7 +1057,7 @@ int tty_perform_flush(struct tty_struct *tty, unsigned long arg)
if (retval)
return retval;
- ld = tty_ldisc_ref(tty);
+ ld = tty_ldisc_ref_wait(tty);
switch (arg) {
case TCIFLUSH:
if (ld && ld->ops->flush_buffer)