diff options
author | Peter Hurley <peter@hurleysoftware.com> | 2014-10-16 15:33:22 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-11-05 16:34:36 -0800 |
commit | 6460fbbf476ad8d4f4196534c00019975b33e1db (patch) | |
tree | e3bc22df1f753a369bb23ecd4a308e605ee92d30 | |
parent | a361858da327263e04dc521ca39091d3119ccff8 (diff) | |
download | lwn-6460fbbf476ad8d4f4196534c00019975b33e1db.tar.gz lwn-6460fbbf476ad8d4f4196534c00019975b33e1db.zip |
tty: WARN for attempted set_termios() of pty master
The pty master's termios should never be set; currently, all code
paths which call the driver's set_termios() method ensure that the
pty slave's termios is being set.
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Reviewed-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/tty/pty.c | 2 | ||||
-rw-r--r-- | drivers/tty/tty_ioctl.c | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c index 4c0218db85ad..6c7602592fe0 100644 --- a/drivers/tty/pty.c +++ b/drivers/tty/pty.c @@ -477,7 +477,6 @@ static const struct tty_operations master_pty_ops_bsd = { .flush_buffer = pty_flush_buffer, .chars_in_buffer = pty_chars_in_buffer, .unthrottle = pty_unthrottle, - .set_termios = pty_set_termios, .ioctl = pty_bsd_ioctl, .cleanup = pty_cleanup, .resize = pty_resize, @@ -654,7 +653,6 @@ static const struct tty_operations ptm_unix98_ops = { .flush_buffer = pty_flush_buffer, .chars_in_buffer = pty_chars_in_buffer, .unthrottle = pty_unthrottle, - .set_termios = pty_set_termios, .ioctl = pty_unix98_ioctl, .resize = pty_resize, .shutdown = pty_unix98_shutdown, diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c index 62380ccf70fb..ab4562c06af4 100644 --- a/drivers/tty/tty_ioctl.c +++ b/drivers/tty/tty_ioctl.c @@ -528,6 +528,8 @@ EXPORT_SYMBOL(tty_termios_hw_change); * is a bit of layering violation here with n_tty in terms of the * internal knowledge of this function. * + * A master pty's termios should never be set. + * * Locking: termios_rwsem */ @@ -537,6 +539,8 @@ int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios) struct tty_ldisc *ld; unsigned long flags; + WARN_ON(tty->driver->type == TTY_DRIVER_TYPE_PTY && + tty->driver->subtype == PTY_TYPE_MASTER); /* * Perform the actual termios internal changes under lock. */ |