Skip to content

Commit

Permalink
tty: the vhangup syscall is racy
Browse files Browse the repository at this point in the history
We now have the infrastructure to sort this out but rather than teaching
the syscall tty lock rules we move the hard work into a tty helper

Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Alan Cox authored and Linus Torvalds committed Oct 13, 2008
1 parent 216ba02 commit 2cb5998
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 2 deletions.
19 changes: 19 additions & 0 deletions drivers/char/tty_io.c
Original file line number Diff line number Diff line change
Expand Up @@ -729,6 +729,25 @@ void tty_vhangup(struct tty_struct *tty)

EXPORT_SYMBOL(tty_vhangup);

/**
* tty_vhangup_self - process vhangup for own ctty
*
* Perform a vhangup on the current controlling tty
*/

void tty_vhangup_self(void)
{
struct tty_struct *tty;

mutex_lock(&tty_mutex);
tty = get_current_tty();
if (tty) {
tty_vhangup(tty);
tty_kref_put(tty);
}
mutex_unlock(&tty_mutex);
}

/**
* tty_hung_up_p - was tty hung up
* @filp: file pointer of tty
Expand Down
3 changes: 1 addition & 2 deletions fs/open.c
Original file line number Diff line number Diff line change
Expand Up @@ -1141,8 +1141,7 @@ EXPORT_SYMBOL(sys_close);
asmlinkage long sys_vhangup(void)
{
if (capable(CAP_SYS_TTY_CONFIG)) {
/* XXX: this needs locking */
tty_vhangup(current->signal->tty);
tty_vhangup_self();
return 0;
}
return -EPERM;
Expand Down
1 change: 1 addition & 0 deletions include/linux/tty.h
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,7 @@ extern int is_ignored(int sig);
extern int tty_signal(int sig, struct tty_struct *tty);
extern void tty_hangup(struct tty_struct *tty);
extern void tty_vhangup(struct tty_struct *tty);
extern void tty_vhangup_self(void);
extern void tty_unhangup(struct file *filp);
extern int tty_hung_up_p(struct file *filp);
extern void do_SAK(struct tty_struct *tty);
Expand Down

0 comments on commit 2cb5998

Please sign in to comment.