Patch "drivers/tty: require read access for controlling terminal" has been added to the 4.1-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
drivers/tty: require read access for controlling terminal
to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
drivers-tty-require-read-access-for-controlling-terminal.patch
and it can be found in the queue-4.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
0c55627167870255158db1cde0d28366f91c8872Mon Sep 17 00:00:00 2001
From: Jann Horn <[email protected]>
Date: Sun, 4 Oct 2015 19:29:12 +0200
Subject: drivers/tty: require read access for controlling terminal
From: Jann Horn <[email protected]>
commit 0c55627167870255158db1cde0d28366f91c8872 upstream.
This is mostly a hardening fix, given that write-only access to other users' ttys is usually only given through setgid tty executables.
--- drivers/tty/tty_io.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-)
drivers/tty/tty_io.c +27 -4
@@ -2144,8 +2144,24 @@ retry_open:if (!noctty && current->signal->leader && !current->signal->tty && - tty->session ==NULL ) -__proc_set_tty (tty); + tty->session ==NULL ) { +/* +* Don't let a process that only has write access to the tty +* obtain the privileges associated with having a tty as +* controlling terminal (being able to reopen it with full +* access through /dev/tty, being able to perform pushback). +* Many distributions set the group of all ttys to "tty" and +* grant write-only access to all terminals for setgid tty +* binaries, which should not imply full privileges on all ttys. +* +* This could theoretically break old code that performs open() +* on a write-only file descriptor. In that case, it might be +* necessary to also permit this if +* inode_permission(inode, MAY_READ) == 0. +*/ +if (filp->f_mode &FMODE_READ ) +__proc_set_tty (tty); + }spin_unlock_irq (¤t->sighand->siglock);read_unlock (&tasklist_lock);tty_unlock (tty);
@@ -2434,7 +2450,7 @@ static int fionbio(struct file *file, in* Takes ->siglock() when updating signal->tty */ -static int tiocsctty (struct tty_struct *tty,int arg) +static int tiocsctty (struct tty_struct *tty,struct file *file,int arg) {int ret =0 ;
@@ -2468,6 +2484,13 @@ static int tiocsctty(struct tty_struct * goto unlock; } } + +/* See the comment in tty_open(). */ +if ((file->f_mode &FMODE_READ ) ==0 && !capable (CAP_SYS_ADMIN )) { + ret = -EPERM ; + goto unlock; + } +proc_set_tty (tty); unlock:read_unlock (&tasklist_lock);
@@ -2860,7 +2883,7 @@ long tty_ioctl(struct file *file, unsignno_tty ();return 0 ;case TIOCSCTTY : -return tiocsctty (tty, arg); +return tiocsctty (tty, file, arg);case TIOCGPGRP :return tiocgpgrp (tty, real_tty, p);case TIOCSPGRP :
Patches currently in stable-queue which might be from [email protected] are
queue-4.1/drivers-tty-require-read-access-for-controlling-terminal.patch queue-4.1/security-fix-typo-in-security_task_prctl.patch