Skip to content

Commit

Permalink
tty: Consolidate noctty checks in tty_open()
Browse files Browse the repository at this point in the history
Evaluate the conditions which prevent this tty being the controlling
terminal in one place, just before setting the controlling terminal.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Peter Hurley authored and Greg Kroah-Hartman committed Jan 27, 2016
1 parent c2bb524 commit 11e1d4a
Showing 1 changed file with 8 additions and 9 deletions.
17 changes: 8 additions & 9 deletions drivers/tty/tty_io.c
Original file line number Diff line number Diff line change
Expand Up @@ -1960,7 +1960,7 @@ static struct tty_struct *tty_open_current_tty(dev_t device, struct file *filp)
* Locking: tty_mutex protects get_tty_driver
*/
static struct tty_driver *tty_lookup_driver(dev_t device, struct file *filp,
int *noctty, int *index)
int *index)
{
struct tty_driver *driver;

Expand All @@ -1970,7 +1970,6 @@ static struct tty_driver *tty_lookup_driver(dev_t device, struct file *filp,
extern struct tty_driver *console_driver;
driver = tty_driver_kref_get(console_driver);
*index = fg_console;
*noctty = 1;
break;
}
#endif
Expand All @@ -1981,7 +1980,6 @@ static struct tty_driver *tty_lookup_driver(dev_t device, struct file *filp,
if (driver) {
/* Don't let /dev/console block */
filp->f_flags |= O_NONBLOCK;
*noctty = 1;
break;
}
}
Expand Down Expand Up @@ -2036,14 +2034,13 @@ static int tty_open(struct inode *inode, struct file *filp)
if (retval)
return -ENOMEM;

noctty = filp->f_flags & O_NOCTTY;
index = -1;
retval = 0;

tty = tty_open_current_tty(device, filp);
if (!tty) {
mutex_lock(&tty_mutex);
driver = tty_lookup_driver(device, filp, &noctty, &index);
driver = tty_lookup_driver(device, filp, &index);
if (IS_ERR(driver)) {
retval = PTR_ERR(driver);
goto err_unlock;
Expand Down Expand Up @@ -2091,10 +2088,6 @@ static int tty_open(struct inode *inode, struct file *filp)
tty_add_file(tty, filp);

check_tty_count(tty, __func__);
if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
tty->driver->subtype == PTY_TYPE_MASTER)
noctty = 1;

tty_debug_hangup(tty, "opening (count=%d)\n", tty->count);

if (tty->ops->open)
Expand Down Expand Up @@ -2127,6 +2120,12 @@ static int tty_open(struct inode *inode, struct file *filp)

read_lock(&tasklist_lock);
spin_lock_irq(&current->sighand->siglock);
noctty = (filp->f_flags & O_NOCTTY) ||
device == MKDEV(TTY_MAJOR, 0) ||
device == MKDEV(TTYAUX_MAJOR, 1) ||
(tty->driver->type == TTY_DRIVER_TYPE_PTY &&
tty->driver->subtype == PTY_TYPE_MASTER);

if (!noctty &&
current->signal->leader &&
!current->signal->tty &&
Expand Down

0 comments on commit 11e1d4a

Please sign in to comment.