Skip to content

Commit

Permalink
tty: Fix transient pty write() EIO
Browse files Browse the repository at this point in the history
Commit 6993903
('pty: Ignore slave pty close() if never successfully opened')
introduced a bug with ptys whereby a write() in parallel with an
open() on an existing pty could mistakenly indicate an I/O error.

Only indicate an I/O error if the condition on open() actually exists.

Reported-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Tested-by: Mikael Pettersson <mikpe@it.uu.se>
Cc: stable <stable@vger.kernel.org> # 3.9
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Peter Hurley authored and Greg Kroah-Hartman committed Jun 17, 2013
1 parent ef223fb commit 7c61c3d
Showing 1 changed file with 5 additions and 8 deletions.
13 changes: 5 additions & 8 deletions drivers/tty/pty.c
Original file line number Diff line number Diff line change
Expand Up @@ -244,14 +244,9 @@ static void pty_flush_buffer(struct tty_struct *tty)

static int pty_open(struct tty_struct *tty, struct file *filp)
{
int retval = -ENODEV;

if (!tty || !tty->link)
goto out;

set_bit(TTY_IO_ERROR, &tty->flags);
return -ENODEV;

retval = -EIO;
if (test_bit(TTY_OTHER_CLOSED, &tty->flags))
goto out;
if (test_bit(TTY_PTY_LOCK, &tty->link->flags))
Expand All @@ -262,9 +257,11 @@ static int pty_open(struct tty_struct *tty, struct file *filp)
clear_bit(TTY_IO_ERROR, &tty->flags);
clear_bit(TTY_OTHER_CLOSED, &tty->link->flags);
set_bit(TTY_THROTTLED, &tty->flags);
retval = 0;
return 0;

out:
return retval;
set_bit(TTY_IO_ERROR, &tty->flags);
return -EIO;
}

static void pty_set_termios(struct tty_struct *tty,
Expand Down

0 comments on commit 7c61c3d

Please sign in to comment.