]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
tty: fix race in tty_fasync
authorGreg Kroah-Hartman <gregkh@suse.de>
Thu, 17 Dec 2009 15:07:19 +0000 (07:07 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 28 Jan 2010 23:20:28 +0000 (15:20 -0800)
commit 703625118069f9f8960d356676662d3db5a9d116 upstream.

We need to keep the lock held over the call to __f_setown() to
prevent a PID race.

Thanks to Al Viro for pointing out the problem, and to Travis for
making us look here in the first place.

Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Tavis Ormandy <taviso@google.com>
Cc: Jeff Dike <jdike@addtoit.com>
Cc: Julien Tinnes <jln@google.com>
Cc: Matt Mackall <mpm@selenic.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/char/tty_io.c

index 0232485ddad193f2348400c2884210b6ed7c44df..c4b82c7eca8c7575e95f1ca12bac51848bae4731 100644 (file)
@@ -2437,8 +2437,8 @@ static int tty_fasync(int fd, struct file *filp, int on)
                        pid = task_pid(current);
                        type = PIDTYPE_PID;
                }
-               spin_unlock_irqrestore(&tty->ctrl_lock, flags);
                retval = __f_setown(filp, pid, type, 0);
+               spin_unlock_irqrestore(&tty->ctrl_lock, flags);
                if (retval)
                        goto out;
        } else {