]> git.baikalelectronics.ru Git - kernel.git/commit
tty: Fix unsafe ldisc reference via ioctl(TIOCGETD)
authorPeter Hurley <peter@hurleysoftware.com>
Mon, 11 Jan 2016 06:40:55 +0000 (22:40 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 27 Jan 2016 07:17:54 +0000 (23:17 -0800)
commit501deb10bb6b5ab866293ffb5e08619a41ed66ea
tree705a69af5bc3fddb08476928885297f895c4f501
parent8b427bdbcf102ed70598131d58b63045e42f65bf
tty: Fix unsafe ldisc reference via ioctl(TIOCGETD)

ioctl(TIOCGETD) retrieves the line discipline id directly from the
ldisc because the line discipline id (c_line) in termios is untrustworthy;
userspace may have set termios via ioctl(TCSETS*) without actually
changing the line discipline via ioctl(TIOCSETD).

However, directly accessing the current ldisc via tty->ldisc is
unsafe; the ldisc ptr dereferenced may be stale if the line discipline
is changing via ioctl(TIOCSETD) or hangup.

Wait for the line discipline reference (just like read() or write())
to retrieve the "current" line discipline id.

Cc: <stable@vger.kernel.org>
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/tty_io.c