Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tty: add TIOCVHANGUP to allow clean tty shutdown of all ttys

This is useful for system management software so that it can kick
off things like gettys and everything that's started from a tty,
before we reuse it from/for something else or shut it down.

Without this ioctl it would have to temporarily become the owner of
the tty, then call vhangup() and then give it up again.

Cc: Lennart Poettering <lennart@poettering.net>
Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Kay Sievers and committed by
Greg Kroah-Hartman
3c95c985 afaae084

+13
+1
arch/alpha/include/asm/ioctls.h
··· 94 94 #define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ 95 95 #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ 96 96 #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ 97 + #define TIOCVHANGUP 0x5437 97 98 98 99 #define TIOCSERCONFIG 0x5453 99 100 #define TIOCSERGWILD 0x5454
+1
arch/mips/include/asm/ioctls.h
··· 85 85 #define TIOCSPTLCK _IOW('T', 0x31, int) /* Lock/unlock Pty */ 86 86 #define TIOCGDEV _IOR('T', 0x32, unsigned int) /* Get primary device node of /dev/console */ 87 87 #define TIOCSIG _IOW('T', 0x36, int) /* Generate signal on Pty slave */ 88 + #define TIOCVHANGUP 0x5437 88 89 89 90 /* I hope the range from 0x5480 on is free ... */ 90 91 #define TIOCSCTTY 0x5480 /* become controlling tty */
+1
arch/parisc/include/asm/ioctls.h
··· 54 54 #define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ 55 55 #define TIOCGDEV _IOR('T',0x32, int) /* Get primary device node of /dev/console */ 56 56 #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ 57 + #define TIOCVHANGUP 0x5437 57 58 58 59 #define FIONCLEX 0x5450 /* these numbers need to be adjusted. */ 59 60 #define FIOCLEX 0x5451
+1
arch/powerpc/include/asm/ioctls.h
··· 96 96 #define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ 97 97 #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ 98 98 #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ 99 + #define TIOCVHANGUP 0x5437 99 100 100 101 #define TIOCSERCONFIG 0x5453 101 102 #define TIOCSERGWILD 0x5454
+1
arch/sh/include/asm/ioctls.h
··· 87 87 #define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ 88 88 #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ 89 89 #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ 90 + #define TIOCVHANGUP _IO('T', 0x37) 90 91 91 92 #define TIOCSERCONFIG _IO('T', 83) /* 0x5453 */ 92 93 #define TIOCSERGWILD _IOR('T', 84, int) /* 0x5454 */
+1
arch/sparc/include/asm/ioctls.h
··· 20 20 #define TCSETSW2 _IOW('T', 14, struct termios2) 21 21 #define TCSETSF2 _IOW('T', 15, struct termios2) 22 22 #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ 23 + #define TIOCVHANGUP _IO('T', 0x37) 23 24 24 25 /* Note that all the ioctls that are not available in Linux have a 25 26 * double underscore on the front to: a) avoid some programs to
+1
arch/xtensa/include/asm/ioctls.h
··· 100 100 #define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ 101 101 #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ 102 102 #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ 103 + #define TIOCVHANGUP _IO('T', 0x37) 103 104 104 105 #define TIOCSERCONFIG _IO('T', 83) 105 106 #define TIOCSERGWILD _IOR('T', 84, int)
+5
drivers/tty/tty_io.c
··· 2626 2626 return put_user(tty->ldisc->ops->num, (int __user *)p); 2627 2627 case TIOCSETD: 2628 2628 return tiocsetd(tty, p); 2629 + case TIOCVHANGUP: 2630 + if (!capable(CAP_SYS_ADMIN)) 2631 + return -EPERM; 2632 + tty_vhangup(tty); 2633 + return 0; 2629 2634 case TIOCGDEV: 2630 2635 { 2631 2636 unsigned int ret = new_encode_dev(tty_devnum(real_tty));
+1
include/asm-generic/ioctls.h
··· 73 73 #define TCSETXF 0x5434 74 74 #define TCSETXW 0x5435 75 75 #define TIOCSIG _IOW('T', 0x36, int) /* pty: generate signal */ 76 + #define TIOCVHANGUP 0x5437 76 77 77 78 #define FIONCLEX 0x5450 78 79 #define FIOCLEX 0x5451