OSDN Git Service

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, 17 Feb 2016 20:31:02 +0000 (12:31 -0800)
commitd343601a19410f71bf1765df5e2edda66fe5de5f
tree86aae1ae8256283e916c337df5ece8f6f527bbc7
parentb4312250147d42dceed6c8d44aa02cb29539db19
tty: Fix unsafe ldisc reference via ioctl(TIOCGETD)

commit 5c17c861a357e9458001f021a7afa7aab9937439 upstream.

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.

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