tty: Destroy ldisc instance on hangup
[deliverable/linux.git] / drivers / tty / tty_io.c
CommitLineData
1da177e4 1/*
1da177e4
LT
2 * Copyright (C) 1991, 1992 Linus Torvalds
3 */
4
5/*
6 * 'tty_io.c' gives an orthogonal feeling to tty's, be they consoles
7 * or rs-channels. It also implements echoing, cooked mode etc.
8 *
9 * Kill-line thanks to John T Kohl, who also corrected VMIN = VTIME = 0.
10 *
11 * Modified by Theodore Ts'o, 9/14/92, to dynamically allocate the
12 * tty_struct and tty_queue structures. Previously there was an array
13 * of 256 tty_struct's which was statically allocated, and the
14 * tty_queue structures were allocated at boot time. Both are now
15 * dynamically allocated only when the tty is open.
16 *
17 * Also restructured routines so that there is more of a separation
18 * between the high-level tty routines (tty_io.c and tty_ioctl.c) and
19 * the low-level tty routines (serial.c, pty.c, console.c). This
37bdfb07 20 * makes for cleaner and more compact code. -TYT, 9/17/92
1da177e4
LT
21 *
22 * Modified by Fred N. van Kempen, 01/29/93, to add line disciplines
23 * which can be dynamically activated and de-activated by the line
24 * discipline handling modules (like SLIP).
25 *
26 * NOTE: pay no attention to the line discipline code (yet); its
27 * interface is still subject to change in this version...
28 * -- TYT, 1/31/92
29 *
30 * Added functionality to the OPOST tty handling. No delays, but all
31 * other bits should be there.
32 * -- Nick Holloway <alfie@dcs.warwick.ac.uk>, 27th May 1993.
33 *
34 * Rewrote canonical mode and added more termios flags.
35 * -- julian@uhunix.uhcc.hawaii.edu (J. Cowley), 13Jan94
36 *
37 * Reorganized FASYNC support so mouse code can share it.
38 * -- ctm@ardi.com, 9Sep95
39 *
40 * New TIOCLINUX variants added.
41 * -- mj@k332.feld.cvut.cz, 19-Nov-95
37bdfb07 42 *
1da177e4
LT
43 * Restrict vt switching via ioctl()
44 * -- grif@cs.ucr.edu, 5-Dec-95
45 *
46 * Move console and virtual terminal code to more appropriate files,
47 * implement CONFIG_VT and generalize console device interface.
48 * -- Marko Kohtala <Marko.Kohtala@hut.fi>, March 97
49 *
d81ed103 50 * Rewrote tty_init_dev and tty_release_dev to eliminate races.
1da177e4
LT
51 * -- Bill Hawes <whawes@star.net>, June 97
52 *
53 * Added devfs support.
54 * -- C. Scott Ananian <cananian@alumni.princeton.edu>, 13-Jan-1998
55 *
56 * Added support for a Unix98-style ptmx device.
57 * -- C. Scott Ananian <cananian@alumni.princeton.edu>, 14-Jan-1998
58 *
59 * Reduced memory usage for older ARM systems
60 * -- Russell King <rmk@arm.linux.org.uk>
61 *
62 * Move do_SAK() into process context. Less stack use in devfs functions.
37bdfb07
AC
63 * alloc_tty_struct() always uses kmalloc()
64 * -- Andrew Morton <andrewm@uow.edu.eu> 17Mar01
1da177e4
LT
65 */
66
1da177e4
LT
67#include <linux/types.h>
68#include <linux/major.h>
69#include <linux/errno.h>
70#include <linux/signal.h>
71#include <linux/fcntl.h>
72#include <linux/sched.h>
73#include <linux/interrupt.h>
74#include <linux/tty.h>
75#include <linux/tty_driver.h>
76#include <linux/tty_flip.h>
77#include <linux/devpts_fs.h>
78#include <linux/file.h>
9f3acc31 79#include <linux/fdtable.h>
1da177e4
LT
80#include <linux/console.h>
81#include <linux/timer.h>
82#include <linux/ctype.h>
83#include <linux/kd.h>
84#include <linux/mm.h>
85#include <linux/string.h>
86#include <linux/slab.h>
87#include <linux/poll.h>
88#include <linux/proc_fs.h>
89#include <linux/init.h>
90#include <linux/module.h>
1da177e4 91#include <linux/device.h>
1da177e4
LT
92#include <linux/wait.h>
93#include <linux/bitops.h>
b20f3ae5 94#include <linux/delay.h>
a352def2 95#include <linux/seq_file.h>
d281da7f 96#include <linux/serial.h>
5a3c6b25 97#include <linux/ratelimit.h>
1da177e4 98
a352def2 99#include <linux/uaccess.h>
1da177e4
LT
100
101#include <linux/kbd_kern.h>
102#include <linux/vt_kern.h>
103#include <linux/selection.h>
1da177e4
LT
104
105#include <linux/kmod.h>
b488893a 106#include <linux/nsproxy.h>
1da177e4
LT
107
108#undef TTY_DEBUG_HANGUP
accff793
PH
109#ifdef TTY_DEBUG_HANGUP
110# define tty_debug_hangup(tty, f, args...) tty_debug(tty, f, ##args)
111#else
112# define tty_debug_hangup(tty, f, args...) do { } while (0)
113#endif
1da177e4
LT
114
115#define TTY_PARANOIA_CHECK 1
116#define CHECK_TTY_COUNT 1
117
edc6afc5 118struct ktermios tty_std_termios = { /* for the benefit of tty drivers */
1da177e4
LT
119 .c_iflag = ICRNL | IXON,
120 .c_oflag = OPOST | ONLCR,
121 .c_cflag = B38400 | CS8 | CREAD | HUPCL,
122 .c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK |
123 ECHOCTL | ECHOKE | IEXTEN,
edc6afc5
AC
124 .c_cc = INIT_C_CC,
125 .c_ispeed = 38400,
126 .c_ospeed = 38400
1da177e4
LT
127};
128
129EXPORT_SYMBOL(tty_std_termios);
130
131/* This list gets poked at by procfs and various bits of boot up code. This
132 could do with some rationalisation such as pulling the tty proc function
133 into this file */
37bdfb07 134
1da177e4
LT
135LIST_HEAD(tty_drivers); /* linked list of tty drivers */
136
24ec839c 137/* Mutex to protect creating and releasing a tty. This is shared with
1da177e4 138 vt.c for deeply disgusting hack reasons */
70522e12 139DEFINE_MUTEX(tty_mutex);
de2a84f2 140EXPORT_SYMBOL(tty_mutex);
1da177e4 141
ee2ffa0d
NP
142/* Spinlock to protect the tty->tty_files list */
143DEFINE_SPINLOCK(tty_files_lock);
144
1da177e4
LT
145static ssize_t tty_read(struct file *, char __user *, size_t, loff_t *);
146static ssize_t tty_write(struct file *, const char __user *, size_t, loff_t *);
37bdfb07
AC
147ssize_t redirected_tty_write(struct file *, const char __user *,
148 size_t, loff_t *);
1da177e4
LT
149static unsigned int tty_poll(struct file *, poll_table *);
150static int tty_open(struct inode *, struct file *);
04f378b1 151long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
e10cc1df 152#ifdef CONFIG_COMPAT
37bdfb07 153static long tty_compat_ioctl(struct file *file, unsigned int cmd,
e10cc1df
PF
154 unsigned long arg);
155#else
156#define tty_compat_ioctl NULL
157#endif
ec79d605 158static int __tty_fasync(int fd, struct file *filp, int on);
37bdfb07 159static int tty_fasync(int fd, struct file *filp, int on);
d5698c28 160static void release_tty(struct tty_struct *tty, int idx);
1da177e4 161
af9b897e
AC
162/**
163 * free_tty_struct - free a disused tty
164 * @tty: tty struct to free
165 *
166 * Free the write buffers, tty queue and tty memory itself.
167 *
168 * Locking: none. Must be called after tty is definitely unused
169 */
170
a3123fd0 171static void free_tty_struct(struct tty_struct *tty)
1da177e4 172{
c8b710b3 173 tty_ldisc_deinit(tty);
a211b1af 174 put_device(tty->dev);
1da177e4 175 kfree(tty->write_buf);
89c8d91e 176 tty->magic = 0xDEADDEAD;
1da177e4
LT
177 kfree(tty);
178}
179
d996b62a
NP
180static inline struct tty_struct *file_tty(struct file *file)
181{
182 return ((struct tty_file_private *)file->private_data)->tty;
183}
184
fa90e1c9 185int tty_alloc_file(struct file *file)
d996b62a
NP
186{
187 struct tty_file_private *priv;
188
f573bd17
PE
189 priv = kmalloc(sizeof(*priv), GFP_KERNEL);
190 if (!priv)
191 return -ENOMEM;
d996b62a 192
fa90e1c9
JS
193 file->private_data = priv;
194
195 return 0;
196}
197
198/* Associate a new file with the tty structure */
199void tty_add_file(struct tty_struct *tty, struct file *file)
200{
201 struct tty_file_private *priv = file->private_data;
202
d996b62a
NP
203 priv->tty = tty;
204 priv->file = file;
d996b62a
NP
205
206 spin_lock(&tty_files_lock);
207 list_add(&priv->list, &tty->tty_files);
208 spin_unlock(&tty_files_lock);
fa90e1c9 209}
f573bd17 210
fa90e1c9
JS
211/**
212 * tty_free_file - free file->private_data
213 *
214 * This shall be used only for fail path handling when tty_add_file was not
215 * called yet.
216 */
217void tty_free_file(struct file *file)
218{
219 struct tty_file_private *priv = file->private_data;
220
221 file->private_data = NULL;
222 kfree(priv);
d996b62a
NP
223}
224
225/* Delete file from its tty */
2520e274 226static void tty_del_file(struct file *file)
d996b62a
NP
227{
228 struct tty_file_private *priv = file->private_data;
229
230 spin_lock(&tty_files_lock);
231 list_del(&priv->list);
232 spin_unlock(&tty_files_lock);
fa90e1c9 233 tty_free_file(file);
d996b62a
NP
234}
235
236
1da177e4
LT
237#define TTY_NUMBER(tty) ((tty)->index + (tty)->driver->name_base)
238
af9b897e
AC
239/**
240 * tty_name - return tty naming
241 * @tty: tty structure
af9b897e
AC
242 *
243 * Convert a tty structure into a name. The name reflects the kernel
244 * naming policy and if udev is in use may not reflect user space
245 *
246 * Locking: none
247 */
248
429b4749 249const char *tty_name(const struct tty_struct *tty)
1da177e4
LT
250{
251 if (!tty) /* Hmm. NULL pointer. That's fun. */
917162c9
RV
252 return "NULL tty";
253 return tty->name;
1da177e4
LT
254}
255
256EXPORT_SYMBOL(tty_name);
257
0a083edd
PH
258const char *tty_driver_name(const struct tty_struct *tty)
259{
260 if (!tty || !tty->driver)
261 return "";
262 return tty->driver->name;
263}
264
82b8f888 265static int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
1da177e4
LT
266 const char *routine)
267{
268#ifdef TTY_PARANOIA_CHECK
269 if (!tty) {
89222e62 270 pr_warn("(%d:%d): %s: NULL tty\n",
1da177e4
LT
271 imajor(inode), iminor(inode), routine);
272 return 1;
273 }
274 if (tty->magic != TTY_MAGIC) {
89222e62 275 pr_warn("(%d:%d): %s: bad magic number\n",
1da177e4
LT
276 imajor(inode), iminor(inode), routine);
277 return 1;
278 }
279#endif
280 return 0;
281}
282
deb287e7 283/* Caller must hold tty_lock */
1da177e4
LT
284static int check_tty_count(struct tty_struct *tty, const char *routine)
285{
286#ifdef CHECK_TTY_COUNT
287 struct list_head *p;
288 int count = 0;
37bdfb07 289
ee2ffa0d 290 spin_lock(&tty_files_lock);
1da177e4
LT
291 list_for_each(p, &tty->tty_files) {
292 count++;
293 }
ee2ffa0d 294 spin_unlock(&tty_files_lock);
1da177e4
LT
295 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
296 tty->driver->subtype == PTY_TYPE_SLAVE &&
297 tty->link && tty->link->count)
298 count++;
299 if (tty->count != count) {
339f36ba
PH
300 tty_warn(tty, "%s: tty->count(%d) != #fd's(%d)\n",
301 routine, tty->count, count);
1da177e4 302 return count;
24ec839c 303 }
1da177e4
LT
304#endif
305 return 0;
306}
307
af9b897e
AC
308/**
309 * get_tty_driver - find device of a tty
310 * @dev_t: device identifier
311 * @index: returns the index of the tty
312 *
313 * This routine returns a tty driver structure, given a device number
314 * and also passes back the index number.
315 *
316 * Locking: caller must hold tty_mutex
1da177e4 317 */
af9b897e 318
1da177e4
LT
319static struct tty_driver *get_tty_driver(dev_t device, int *index)
320{
321 struct tty_driver *p;
322
323 list_for_each_entry(p, &tty_drivers, tty_drivers) {
324 dev_t base = MKDEV(p->major, p->minor_start);
325 if (device < base || device >= base + p->num)
326 continue;
327 *index = device - base;
7d7b93c1 328 return tty_driver_kref_get(p);
1da177e4
LT
329 }
330 return NULL;
331}
332
f2d937f3
JW
333#ifdef CONFIG_CONSOLE_POLL
334
335/**
336 * tty_find_polling_driver - find device of a polled tty
337 * @name: name string to match
338 * @line: pointer to resulting tty line nr
339 *
340 * This routine returns a tty driver structure, given a name
341 * and the condition that the tty driver is capable of polled
342 * operation.
343 */
344struct tty_driver *tty_find_polling_driver(char *name, int *line)
345{
346 struct tty_driver *p, *res = NULL;
347 int tty_line = 0;
0dca0fd2 348 int len;
5f0878ac 349 char *str, *stp;
f2d937f3 350
0dca0fd2
JW
351 for (str = name; *str; str++)
352 if ((*str >= '0' && *str <= '9') || *str == ',')
353 break;
354 if (!*str)
355 return NULL;
356
357 len = str - name;
358 tty_line = simple_strtoul(str, &str, 10);
359
f2d937f3
JW
360 mutex_lock(&tty_mutex);
361 /* Search through the tty devices to look for a match */
362 list_for_each_entry(p, &tty_drivers, tty_drivers) {
0dca0fd2
JW
363 if (strncmp(name, p->name, len) != 0)
364 continue;
5f0878ac
AC
365 stp = str;
366 if (*stp == ',')
367 stp++;
368 if (*stp == '\0')
369 stp = NULL;
f2d937f3 370
6eb68d6f 371 if (tty_line >= 0 && tty_line < p->num && p->ops &&
5f0878ac 372 p->ops->poll_init && !p->ops->poll_init(p, tty_line, stp)) {
7d7b93c1 373 res = tty_driver_kref_get(p);
f2d937f3
JW
374 *line = tty_line;
375 break;
376 }
377 }
378 mutex_unlock(&tty_mutex);
379
380 return res;
381}
382EXPORT_SYMBOL_GPL(tty_find_polling_driver);
383#endif
384
af9b897e
AC
385/**
386 * tty_check_change - check for POSIX terminal changes
387 * @tty: tty to check
388 *
389 * If we try to write to, or set the state of, a terminal and we're
390 * not in the foreground, send a SIGTTOU. If the signal is blocked or
391 * ignored, go ahead and perform the operation. (POSIX 7.2)
392 *
978e595f 393 * Locking: ctrl_lock
1da177e4 394 */
af9b897e 395
2812d9e9 396int __tty_check_change(struct tty_struct *tty, int sig)
1da177e4 397{
47f86834 398 unsigned long flags;
2812d9e9 399 struct pid *pgrp, *tty_pgrp;
47f86834
AC
400 int ret = 0;
401
1da177e4
LT
402 if (current->signal->tty != tty)
403 return 0;
47f86834 404
6719693c
PD
405 rcu_read_lock();
406 pgrp = task_pgrp(current);
407
47f86834 408 spin_lock_irqsave(&tty->ctrl_lock, flags);
2812d9e9 409 tty_pgrp = tty->pgrp;
9ffee4cb 410 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
6719693c 411
2812d9e9
PH
412 if (tty_pgrp && pgrp != tty->pgrp) {
413 if (is_ignored(sig)) {
414 if (sig == SIGTTIN)
415 ret = -EIO;
416 } else if (is_current_pgrp_orphaned())
417 ret = -EIO;
418 else {
419 kill_pgrp(pgrp, sig, 1);
420 set_thread_flag(TIF_SIGPENDING);
421 ret = -ERESTARTSYS;
422 }
47f86834 423 }
6719693c 424 rcu_read_unlock();
2812d9e9 425
339f36ba
PH
426 if (!tty_pgrp)
427 tty_warn(tty, "sig=%d, tty->pgrp == NULL!\n", sig);
2812d9e9 428
47f86834 429 return ret;
1da177e4
LT
430}
431
2812d9e9
PH
432int tty_check_change(struct tty_struct *tty)
433{
434 return __tty_check_change(tty, SIGTTOU);
435}
1da177e4
LT
436EXPORT_SYMBOL(tty_check_change);
437
37bdfb07 438static ssize_t hung_up_tty_read(struct file *file, char __user *buf,
1da177e4
LT
439 size_t count, loff_t *ppos)
440{
441 return 0;
442}
443
37bdfb07 444static ssize_t hung_up_tty_write(struct file *file, const char __user *buf,
1da177e4
LT
445 size_t count, loff_t *ppos)
446{
447 return -EIO;
448}
449
450/* No kernel lock held - none needed ;) */
37bdfb07 451static unsigned int hung_up_tty_poll(struct file *filp, poll_table *wait)
1da177e4
LT
452{
453 return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM;
454}
455
04f378b1
AC
456static long hung_up_tty_ioctl(struct file *file, unsigned int cmd,
457 unsigned long arg)
38ad2ed0
PF
458{
459 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
460}
461
37bdfb07 462static long hung_up_tty_compat_ioctl(struct file *file,
38ad2ed0 463 unsigned int cmd, unsigned long arg)
1da177e4
LT
464{
465 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
466}
467
62322d25 468static const struct file_operations tty_fops = {
1da177e4
LT
469 .llseek = no_llseek,
470 .read = tty_read,
471 .write = tty_write,
472 .poll = tty_poll,
04f378b1 473 .unlocked_ioctl = tty_ioctl,
e10cc1df 474 .compat_ioctl = tty_compat_ioctl,
1da177e4
LT
475 .open = tty_open,
476 .release = tty_release,
477 .fasync = tty_fasync,
478};
479
62322d25 480static const struct file_operations console_fops = {
1da177e4
LT
481 .llseek = no_llseek,
482 .read = tty_read,
483 .write = redirected_tty_write,
484 .poll = tty_poll,
04f378b1 485 .unlocked_ioctl = tty_ioctl,
e10cc1df 486 .compat_ioctl = tty_compat_ioctl,
1da177e4
LT
487 .open = tty_open,
488 .release = tty_release,
489 .fasync = tty_fasync,
490};
491
62322d25 492static const struct file_operations hung_up_tty_fops = {
1da177e4
LT
493 .llseek = no_llseek,
494 .read = hung_up_tty_read,
495 .write = hung_up_tty_write,
496 .poll = hung_up_tty_poll,
04f378b1 497 .unlocked_ioctl = hung_up_tty_ioctl,
38ad2ed0 498 .compat_ioctl = hung_up_tty_compat_ioctl,
1da177e4
LT
499 .release = tty_release,
500};
501
502static DEFINE_SPINLOCK(redirect_lock);
503static struct file *redirect;
504
11d9befd
PH
505
506void proc_clear_tty(struct task_struct *p)
507{
508 unsigned long flags;
509 struct tty_struct *tty;
510 spin_lock_irqsave(&p->sighand->siglock, flags);
511 tty = p->signal->tty;
512 p->signal->tty = NULL;
513 spin_unlock_irqrestore(&p->sighand->siglock, flags);
514 tty_kref_put(tty);
515}
516
2c411c11
PH
517/**
518 * proc_set_tty - set the controlling terminal
519 *
520 * Only callable by the session leader and only if it does not already have
521 * a controlling terminal.
522 *
e218eb32
PH
523 * Caller must hold: tty_lock()
524 * a readlock on tasklist_lock
2c411c11
PH
525 * sighand lock
526 */
bce65f18 527static void __proc_set_tty(struct tty_struct *tty)
11d9befd 528{
ae28fa72
PH
529 unsigned long flags;
530
ae28fa72 531 spin_lock_irqsave(&tty->ctrl_lock, flags);
a361858d
PH
532 /*
533 * The session and fg pgrp references will be non-NULL if
534 * tiocsctty() is stealing the controlling tty
535 */
ae28fa72
PH
536 put_pid(tty->session);
537 put_pid(tty->pgrp);
538 tty->pgrp = get_pid(task_pgrp(current));
539 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
540 tty->session = get_pid(task_session(current));
541 if (current->signal->tty) {
e2dfa3d3
PH
542 tty_debug(tty, "current tty %s not NULL!!\n",
543 current->signal->tty->name);
ae28fa72 544 tty_kref_put(current->signal->tty);
11d9befd 545 }
bce65f18
PH
546 put_pid(current->signal->tty_old_pgrp);
547 current->signal->tty = tty_kref_get(tty);
548 current->signal->tty_old_pgrp = NULL;
11d9befd
PH
549}
550
bce65f18 551static void proc_set_tty(struct tty_struct *tty)
11d9befd 552{
bce65f18
PH
553 spin_lock_irq(&current->sighand->siglock);
554 __proc_set_tty(tty);
555 spin_unlock_irq(&current->sighand->siglock);
11d9befd
PH
556}
557
558struct tty_struct *get_current_tty(void)
559{
560 struct tty_struct *tty;
561 unsigned long flags;
562
563 spin_lock_irqsave(&current->sighand->siglock, flags);
564 tty = tty_kref_get(current->signal->tty);
565 spin_unlock_irqrestore(&current->sighand->siglock, flags);
566 return tty;
567}
568EXPORT_SYMBOL_GPL(get_current_tty);
569
570static void session_clear_tty(struct pid *session)
571{
572 struct task_struct *p;
573 do_each_pid_task(session, PIDTYPE_SID, p) {
574 proc_clear_tty(p);
575 } while_each_pid_task(session, PIDTYPE_SID, p);
576}
577
1da177e4
LT
578/**
579 * tty_wakeup - request more data
580 * @tty: terminal
581 *
582 * Internal and external helper for wakeups of tty. This function
583 * informs the line discipline if present that the driver is ready
584 * to receive more output data.
585 */
37bdfb07 586
1da177e4
LT
587void tty_wakeup(struct tty_struct *tty)
588{
589 struct tty_ldisc *ld;
37bdfb07 590
1da177e4
LT
591 if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) {
592 ld = tty_ldisc_ref(tty);
37bdfb07 593 if (ld) {
a352def2
AC
594 if (ld->ops->write_wakeup)
595 ld->ops->write_wakeup(tty);
1da177e4
LT
596 tty_ldisc_deref(ld);
597 }
598 }
4b19449d 599 wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
1da177e4
LT
600}
601
602EXPORT_SYMBOL_GPL(tty_wakeup);
603
ea648a47
PH
604/**
605 * tty_signal_session_leader - sends SIGHUP to session leader
f91e2590
PH
606 * @tty controlling tty
607 * @exit_session if non-zero, signal all foreground group processes
ea648a47 608 *
f91e2590
PH
609 * Send SIGHUP and SIGCONT to the session leader and its process group.
610 * Optionally, signal all processes in the foreground process group.
ea648a47
PH
611 *
612 * Returns the number of processes in the session with this tty
613 * as their controlling terminal. This value is used to drop
614 * tty references for those processes.
615 */
f91e2590 616static int tty_signal_session_leader(struct tty_struct *tty, int exit_session)
ea648a47
PH
617{
618 struct task_struct *p;
ea648a47 619 int refs = 0;
f91e2590 620 struct pid *tty_pgrp = NULL;
ea648a47
PH
621
622 read_lock(&tasklist_lock);
623 if (tty->session) {
624 do_each_pid_task(tty->session, PIDTYPE_SID, p) {
625 spin_lock_irq(&p->sighand->siglock);
626 if (p->signal->tty == tty) {
627 p->signal->tty = NULL;
628 /* We defer the dereferences outside fo
629 the tasklist lock */
630 refs++;
631 }
632 if (!p->signal->leader) {
633 spin_unlock_irq(&p->sighand->siglock);
634 continue;
635 }
636 __group_send_sig_info(SIGHUP, SEND_SIG_PRIV, p);
637 __group_send_sig_info(SIGCONT, SEND_SIG_PRIV, p);
638 put_pid(p->signal->tty_old_pgrp); /* A noop */
bc30c3b2 639 spin_lock(&tty->ctrl_lock);
f91e2590 640 tty_pgrp = get_pid(tty->pgrp);
ea648a47
PH
641 if (tty->pgrp)
642 p->signal->tty_old_pgrp = get_pid(tty->pgrp);
bc30c3b2 643 spin_unlock(&tty->ctrl_lock);
ea648a47
PH
644 spin_unlock_irq(&p->sighand->siglock);
645 } while_each_pid_task(tty->session, PIDTYPE_SID, p);
646 }
647 read_unlock(&tasklist_lock);
648
f91e2590
PH
649 if (tty_pgrp) {
650 if (exit_session)
651 kill_pgrp(tty_pgrp, SIGHUP, exit_session);
652 put_pid(tty_pgrp);
653 }
654
ea648a47
PH
655 return refs;
656}
657
af9b897e 658/**
11dbf203 659 * __tty_hangup - actual handler for hangup events
65f27f38 660 * @work: tty device
af9b897e 661 *
ef4f527c 662 * This can be called by a "kworker" kernel thread. That is process
af9b897e
AC
663 * synchronous but doesn't hold any locks, so we need to make sure we
664 * have the appropriate locks for what we're doing.
665 *
666 * The hangup event clears any pending redirections onto the hung up
667 * device. It ensures future writes will error and it does the needed
668 * line discipline hangup and signal delivery. The tty object itself
669 * remains intact.
670 *
671 * Locking:
ec79d605 672 * BTM
24ec839c
PZ
673 * redirect lock for undoing redirection
674 * file list lock for manipulating list of ttys
137084bb 675 * tty_ldiscs_lock from called functions
6a1c0680 676 * termios_rwsem resetting termios data
24ec839c
PZ
677 * tasklist_lock to walk task list for hangup event
678 * ->siglock to protect ->signal/->sighand
1da177e4 679 */
f91e2590 680static void __tty_hangup(struct tty_struct *tty, int exit_session)
1da177e4 681{
37bdfb07 682 struct file *cons_filp = NULL;
1da177e4 683 struct file *filp, *f = NULL;
d996b62a 684 struct tty_file_private *priv;
1da177e4 685 int closecount = 0, n;
ea648a47 686 int refs;
1da177e4
LT
687
688 if (!tty)
689 return;
690
1da177e4
LT
691
692 spin_lock(&redirect_lock);
d996b62a 693 if (redirect && file_tty(redirect) == tty) {
1da177e4
LT
694 f = redirect;
695 redirect = NULL;
696 }
697 spin_unlock(&redirect_lock);
37bdfb07 698
89c8d91e 699 tty_lock(tty);
11dbf203 700
cb50e523
PH
701 if (test_bit(TTY_HUPPED, &tty->flags)) {
702 tty_unlock(tty);
703 return;
704 }
705
ec79d605
AB
706 /* inuse_filps is protected by the single tty lock,
707 this really needs to change if we want to flush the
708 workqueue with the lock held */
11dbf203 709 check_tty_count(tty, "tty_hangup");
36ba782e 710
ee2ffa0d 711 spin_lock(&tty_files_lock);
1da177e4 712 /* This breaks for file handles being sent over AF_UNIX sockets ? */
d996b62a
NP
713 list_for_each_entry(priv, &tty->tty_files, list) {
714 filp = priv->file;
1da177e4
LT
715 if (filp->f_op->write == redirected_tty_write)
716 cons_filp = filp;
717 if (filp->f_op->write != tty_write)
718 continue;
719 closecount++;
ec79d605 720 __tty_fasync(-1, filp, 0); /* can't block */
1da177e4
LT
721 filp->f_op = &hung_up_tty_fops;
722 }
ee2ffa0d 723 spin_unlock(&tty_files_lock);
37bdfb07 724
25fdf243
PH
725 refs = tty_signal_session_leader(tty, exit_session);
726 /* Account for the p->signal references we killed */
727 while (refs--)
728 tty_kref_put(tty);
729
892d1fa7 730 tty_ldisc_hangup(tty, cons_filp != NULL);
37bdfb07 731
20cc225b 732 spin_lock_irq(&tty->ctrl_lock);
c65c9bc3 733 clear_bit(TTY_THROTTLED, &tty->flags);
c65c9bc3 734 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
d9c1e9a8
EB
735 put_pid(tty->session);
736 put_pid(tty->pgrp);
ab521dc0
EB
737 tty->session = NULL;
738 tty->pgrp = NULL;
1da177e4 739 tty->ctrl_status = 0;
20cc225b 740 spin_unlock_irq(&tty->ctrl_lock);
9c9f4ded 741
1da177e4 742 /*
37bdfb07
AC
743 * If one of the devices matches a console pointer, we
744 * cannot just call hangup() because that will cause
745 * tty->count and state->count to go out of sync.
746 * So we just call close() the right number of times.
1da177e4
LT
747 */
748 if (cons_filp) {
f34d7a5b 749 if (tty->ops->close)
1da177e4 750 for (n = 0; n < closecount; n++)
f34d7a5b
AC
751 tty->ops->close(tty, cons_filp);
752 } else if (tty->ops->hangup)
7c6d340f 753 tty->ops->hangup(tty);
37bdfb07 754 /*
892d1fa7
PH
755 * We don't want to have driver/ldisc interactions beyond the ones
756 * we did here. The driver layer expects no calls after ->hangup()
757 * from the ldisc side, which is now guaranteed.
37bdfb07 758 */
1da177e4 759 set_bit(TTY_HUPPED, &tty->flags);
89c8d91e 760 tty_unlock(tty);
11dbf203 761
1da177e4
LT
762 if (f)
763 fput(f);
764}
765
ddcd9fb6
AB
766static void do_tty_hangup(struct work_struct *work)
767{
768 struct tty_struct *tty =
769 container_of(work, struct tty_struct, hangup_work);
770
f91e2590 771 __tty_hangup(tty, 0);
ddcd9fb6
AB
772}
773
af9b897e
AC
774/**
775 * tty_hangup - trigger a hangup event
776 * @tty: tty to hangup
777 *
778 * A carrier loss (virtual or otherwise) has occurred on this like
779 * schedule a hangup sequence to run after this event.
780 */
781
37bdfb07 782void tty_hangup(struct tty_struct *tty)
1da177e4 783{
d435cefe 784 tty_debug_hangup(tty, "hangup\n");
1da177e4
LT
785 schedule_work(&tty->hangup_work);
786}
787
788EXPORT_SYMBOL(tty_hangup);
789
af9b897e
AC
790/**
791 * tty_vhangup - process vhangup
792 * @tty: tty to hangup
793 *
794 * The user has asked via system call for the terminal to be hung up.
795 * We do this synchronously so that when the syscall returns the process
3a4fa0a2 796 * is complete. That guarantee is necessary for security reasons.
af9b897e
AC
797 */
798
37bdfb07 799void tty_vhangup(struct tty_struct *tty)
1da177e4 800{
d435cefe 801 tty_debug_hangup(tty, "vhangup\n");
f91e2590 802 __tty_hangup(tty, 0);
1da177e4 803}
37bdfb07 804
1da177e4
LT
805EXPORT_SYMBOL(tty_vhangup);
806
11dbf203 807
2cb5998b
AC
808/**
809 * tty_vhangup_self - process vhangup for own ctty
810 *
811 * Perform a vhangup on the current controlling tty
812 */
813
814void tty_vhangup_self(void)
815{
816 struct tty_struct *tty;
817
2cb5998b
AC
818 tty = get_current_tty();
819 if (tty) {
820 tty_vhangup(tty);
821 tty_kref_put(tty);
822 }
2cb5998b
AC
823}
824
f91e2590
PH
825/**
826 * tty_vhangup_session - hangup session leader exit
827 * @tty: tty to hangup
828 *
829 * The session leader is exiting and hanging up its controlling terminal.
830 * Every process in the foreground process group is signalled SIGHUP.
831 *
832 * We do this synchronously so that when the syscall returns the process
833 * is complete. That guarantee is necessary for security reasons.
834 */
835
44a459fd 836static void tty_vhangup_session(struct tty_struct *tty)
f91e2590 837{
d435cefe 838 tty_debug_hangup(tty, "session hangup\n");
f91e2590
PH
839 __tty_hangup(tty, 1);
840}
841
af9b897e
AC
842/**
843 * tty_hung_up_p - was tty hung up
844 * @filp: file pointer of tty
845 *
846 * Return true if the tty has been subject to a vhangup or a carrier
847 * loss
848 */
849
37bdfb07 850int tty_hung_up_p(struct file *filp)
1da177e4
LT
851{
852 return (filp->f_op == &hung_up_tty_fops);
853}
854
855EXPORT_SYMBOL(tty_hung_up_p);
856
af9b897e
AC
857/**
858 * disassociate_ctty - disconnect controlling tty
859 * @on_exit: true if exiting so need to "hang up" the session
1da177e4 860 *
af9b897e
AC
861 * This function is typically called only by the session leader, when
862 * it wants to disassociate itself from its controlling tty.
863 *
864 * It performs the following functions:
1da177e4
LT
865 * (1) Sends a SIGHUP and SIGCONT to the foreground process group
866 * (2) Clears the tty from being controlling the session
867 * (3) Clears the controlling tty for all processes in the
868 * session group.
869 *
af9b897e
AC
870 * The argument on_exit is set to 1 if called when a process is
871 * exiting; it is 0 if called by the ioctl TIOCNOTTY.
872 *
24ec839c 873 * Locking:
ec79d605
AB
874 * BTM is taken for hysterical raisins, and held when
875 * called from no_tty().
24ec839c
PZ
876 * tty_mutex is taken to protect tty
877 * ->siglock is taken to protect ->signal/->sighand
878 * tasklist_lock is taken to walk process list for sessions
879 * ->siglock is taken to protect ->signal/->sighand
1da177e4 880 */
af9b897e 881
1da177e4
LT
882void disassociate_ctty(int on_exit)
883{
884 struct tty_struct *tty;
1da177e4 885
5ec93d11
AC
886 if (!current->signal->leader)
887 return;
1da177e4 888
24ec839c 889 tty = get_current_tty();
1da177e4 890 if (tty) {
f91e2590
PH
891 if (on_exit && tty->driver->type != TTY_DRIVER_TYPE_PTY) {
892 tty_vhangup_session(tty);
893 } else {
894 struct pid *tty_pgrp = tty_get_pgrp(tty);
895 if (tty_pgrp) {
896 kill_pgrp(tty_pgrp, SIGHUP, on_exit);
03e12617
ON
897 if (!on_exit)
898 kill_pgrp(tty_pgrp, SIGCONT, on_exit);
f91e2590
PH
899 put_pid(tty_pgrp);
900 }
1411dc4a 901 }
f91e2590
PH
902 tty_kref_put(tty);
903
680a9671 904 } else if (on_exit) {
ab521dc0 905 struct pid *old_pgrp;
680a9671
EB
906 spin_lock_irq(&current->sighand->siglock);
907 old_pgrp = current->signal->tty_old_pgrp;
ab521dc0 908 current->signal->tty_old_pgrp = NULL;
680a9671 909 spin_unlock_irq(&current->sighand->siglock);
24ec839c 910 if (old_pgrp) {
ab521dc0
EB
911 kill_pgrp(old_pgrp, SIGHUP, on_exit);
912 kill_pgrp(old_pgrp, SIGCONT, on_exit);
913 put_pid(old_pgrp);
1da177e4 914 }
1da177e4
LT
915 return;
916 }
1da177e4 917
24ec839c 918 spin_lock_irq(&current->sighand->siglock);
2a65f1d9 919 put_pid(current->signal->tty_old_pgrp);
23cac8de 920 current->signal->tty_old_pgrp = NULL;
24ec839c 921
c70dbb1e 922 tty = tty_kref_get(current->signal->tty);
24ec839c 923 if (tty) {
47f86834
AC
924 unsigned long flags;
925 spin_lock_irqsave(&tty->ctrl_lock, flags);
ab521dc0
EB
926 put_pid(tty->session);
927 put_pid(tty->pgrp);
928 tty->session = NULL;
929 tty->pgrp = NULL;
47f86834 930 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
452a00d2 931 tty_kref_put(tty);
accff793
PH
932 } else
933 tty_debug_hangup(tty, "no current tty\n");
1da177e4 934
c70dbb1e 935 spin_unlock_irq(&current->sighand->siglock);
1da177e4
LT
936 /* Now clear signal->tty under the lock */
937 read_lock(&tasklist_lock);
ab521dc0 938 session_clear_tty(task_session(current));
1da177e4 939 read_unlock(&tasklist_lock);
1da177e4
LT
940}
941
98a27ba4
EB
942/**
943 *
944 * no_tty - Ensure the current process does not have a controlling tty
945 */
946void no_tty(void)
947{
3af502b9
AC
948 /* FIXME: Review locking here. The tty_lock never covered any race
949 between a new association and proc_clear_tty but possible we need
950 to protect against this anyway */
98a27ba4 951 struct task_struct *tsk = current;
5ec93d11 952 disassociate_ctty(0);
98a27ba4
EB
953 proc_clear_tty(tsk);
954}
955
af9b897e
AC
956
957/**
beb7dd86 958 * stop_tty - propagate flow control
af9b897e
AC
959 * @tty: tty to stop
960 *
01adc807 961 * Perform flow control to the driver. May be called
af9b897e
AC
962 * on an already stopped device and will not re-call the driver
963 * method.
964 *
965 * This functionality is used by both the line disciplines for
966 * halting incoming flow and by the driver. It may therefore be
967 * called from any context, may be under the tty atomic_write_lock
968 * but not always.
969 *
970 * Locking:
f9e053dc 971 * flow_lock
af9b897e
AC
972 */
973
f9e053dc 974void __stop_tty(struct tty_struct *tty)
1da177e4 975{
f9e053dc 976 if (tty->stopped)
1da177e4
LT
977 return;
978 tty->stopped = 1;
f34d7a5b 979 if (tty->ops->stop)
c961bfb1 980 tty->ops->stop(tty);
1da177e4
LT
981}
982
f9e053dc
PH
983void stop_tty(struct tty_struct *tty)
984{
985 unsigned long flags;
986
987 spin_lock_irqsave(&tty->flow_lock, flags);
988 __stop_tty(tty);
989 spin_unlock_irqrestore(&tty->flow_lock, flags);
990}
1da177e4
LT
991EXPORT_SYMBOL(stop_tty);
992
af9b897e 993/**
beb7dd86 994 * start_tty - propagate flow control
af9b897e
AC
995 * @tty: tty to start
996 *
01adc807
PH
997 * Start a tty that has been stopped if at all possible. If this
998 * tty was previous stopped and is now being started, the driver
999 * start method is invoked and the line discipline woken.
af9b897e
AC
1000 *
1001 * Locking:
f9e053dc 1002 * flow_lock
af9b897e
AC
1003 */
1004
f9e053dc 1005void __start_tty(struct tty_struct *tty)
1da177e4 1006{
f9e053dc 1007 if (!tty->stopped || tty->flow_stopped)
1da177e4
LT
1008 return;
1009 tty->stopped = 0;
f34d7a5b 1010 if (tty->ops->start)
c961bfb1 1011 tty->ops->start(tty);
1da177e4 1012 tty_wakeup(tty);
1da177e4
LT
1013}
1014
f9e053dc
PH
1015void start_tty(struct tty_struct *tty)
1016{
1017 unsigned long flags;
1018
1019 spin_lock_irqsave(&tty->flow_lock, flags);
1020 __start_tty(tty);
1021 spin_unlock_irqrestore(&tty->flow_lock, flags);
1022}
1da177e4
LT
1023EXPORT_SYMBOL(start_tty);
1024
37b7f3c7
JS
1025static void tty_update_time(struct timespec *time)
1026{
f0bf0bd0 1027 unsigned long sec = get_seconds();
fbf47635
GKH
1028
1029 /*
1030 * We only care if the two values differ in anything other than the
1031 * lower three bits (i.e every 8 seconds). If so, then we can update
1032 * the time of the tty device, otherwise it could be construded as a
1033 * security leak to let userspace know the exact timing of the tty.
1034 */
1035 if ((sec ^ time->tv_sec) & ~7)
37b7f3c7
JS
1036 time->tv_sec = sec;
1037}
1038
af9b897e
AC
1039/**
1040 * tty_read - read method for tty device files
1041 * @file: pointer to tty file
1042 * @buf: user buffer
1043 * @count: size of user buffer
1044 * @ppos: unused
1045 *
1046 * Perform the read system call function on this terminal device. Checks
1047 * for hung up devices before calling the line discipline method.
1048 *
1049 * Locking:
47f86834
AC
1050 * Locks the line discipline internally while needed. Multiple
1051 * read calls may be outstanding in parallel.
af9b897e
AC
1052 */
1053
37bdfb07 1054static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
1da177e4
LT
1055 loff_t *ppos)
1056{
1057 int i;
37b7f3c7 1058 struct inode *inode = file_inode(file);
d996b62a 1059 struct tty_struct *tty = file_tty(file);
1da177e4
LT
1060 struct tty_ldisc *ld;
1061
37b7f3c7 1062 if (tty_paranoia_check(tty, inode, "tty_read"))
1da177e4
LT
1063 return -EIO;
1064 if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
1065 return -EIO;
1066
1067 /* We want to wait for the line discipline to sort out in this
1068 situation */
1069 ld = tty_ldisc_ref_wait(tty);
e55afd11
PH
1070 if (!ld)
1071 return hung_up_tty_read(file, buf, count, ppos);
a352def2 1072 if (ld->ops->read)
c961bfb1 1073 i = ld->ops->read(tty, file, buf, count);
1da177e4
LT
1074 else
1075 i = -EIO;
1076 tty_ldisc_deref(ld);
b0de59b5 1077
37b7f3c7
JS
1078 if (i > 0)
1079 tty_update_time(&inode->i_atime);
1080
1da177e4
LT
1081 return i;
1082}
1083
136d5258 1084static void tty_write_unlock(struct tty_struct *tty)
9c1729db
AC
1085{
1086 mutex_unlock(&tty->atomic_write_lock);
4b19449d 1087 wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
9c1729db
AC
1088}
1089
136d5258 1090static int tty_write_lock(struct tty_struct *tty, int ndelay)
9c1729db
AC
1091{
1092 if (!mutex_trylock(&tty->atomic_write_lock)) {
1093 if (ndelay)
1094 return -EAGAIN;
1095 if (mutex_lock_interruptible(&tty->atomic_write_lock))
1096 return -ERESTARTSYS;
1097 }
1098 return 0;
1099}
1100
1da177e4
LT
1101/*
1102 * Split writes up in sane blocksizes to avoid
1103 * denial-of-service type attacks
1104 */
1105static inline ssize_t do_tty_write(
1106 ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t),
1107 struct tty_struct *tty,
1108 struct file *file,
1109 const char __user *buf,
1110 size_t count)
1111{
9c1729db 1112 ssize_t ret, written = 0;
1da177e4 1113 unsigned int chunk;
37bdfb07 1114
9c1729db
AC
1115 ret = tty_write_lock(tty, file->f_flags & O_NDELAY);
1116 if (ret < 0)
1117 return ret;
1da177e4
LT
1118
1119 /*
1120 * We chunk up writes into a temporary buffer. This
1121 * simplifies low-level drivers immensely, since they
1122 * don't have locking issues and user mode accesses.
1123 *
1124 * But if TTY_NO_WRITE_SPLIT is set, we should use a
1125 * big chunk-size..
1126 *
1127 * The default chunk-size is 2kB, because the NTTY
1128 * layer has problems with bigger chunks. It will
1129 * claim to be able to handle more characters than
1130 * it actually does.
af9b897e
AC
1131 *
1132 * FIXME: This can probably go away now except that 64K chunks
1133 * are too likely to fail unless switched to vmalloc...
1da177e4
LT
1134 */
1135 chunk = 2048;
1136 if (test_bit(TTY_NO_WRITE_SPLIT, &tty->flags))
1137 chunk = 65536;
1138 if (count < chunk)
1139 chunk = count;
1140
70522e12 1141 /* write_buf/write_cnt is protected by the atomic_write_lock mutex */
1da177e4 1142 if (tty->write_cnt < chunk) {
402fda92 1143 unsigned char *buf_chunk;
1da177e4
LT
1144
1145 if (chunk < 1024)
1146 chunk = 1024;
1147
402fda92
JW
1148 buf_chunk = kmalloc(chunk, GFP_KERNEL);
1149 if (!buf_chunk) {
9c1729db
AC
1150 ret = -ENOMEM;
1151 goto out;
1da177e4
LT
1152 }
1153 kfree(tty->write_buf);
1154 tty->write_cnt = chunk;
402fda92 1155 tty->write_buf = buf_chunk;
1da177e4
LT
1156 }
1157
1158 /* Do the write .. */
1159 for (;;) {
1160 size_t size = count;
1161 if (size > chunk)
1162 size = chunk;
1163 ret = -EFAULT;
1164 if (copy_from_user(tty->write_buf, buf, size))
1165 break;
1da177e4 1166 ret = write(tty, file, tty->write_buf, size);
1da177e4
LT
1167 if (ret <= 0)
1168 break;
1169 written += ret;
1170 buf += ret;
1171 count -= ret;
1172 if (!count)
1173 break;
1174 ret = -ERESTARTSYS;
1175 if (signal_pending(current))
1176 break;
1177 cond_resched();
1178 }
37b7f3c7
JS
1179 if (written) {
1180 tty_update_time(&file_inode(file)->i_mtime);
1da177e4 1181 ret = written;
37b7f3c7 1182 }
9c1729db
AC
1183out:
1184 tty_write_unlock(tty);
1da177e4
LT
1185 return ret;
1186}
1187
95f9bfc6
AC
1188/**
1189 * tty_write_message - write a message to a certain tty, not just the console.
1190 * @tty: the destination tty_struct
1191 * @msg: the message to write
1192 *
1193 * This is used for messages that need to be redirected to a specific tty.
1194 * We don't put it into the syslog queue right now maybe in the future if
1195 * really needed.
1196 *
ec79d605 1197 * We must still hold the BTM and test the CLOSING flag for the moment.
95f9bfc6
AC
1198 */
1199
1200void tty_write_message(struct tty_struct *tty, char *msg)
1201{
95f9bfc6
AC
1202 if (tty) {
1203 mutex_lock(&tty->atomic_write_lock);
89c8d91e 1204 tty_lock(tty);
4b41b953 1205 if (tty->ops->write && tty->count > 0)
95f9bfc6 1206 tty->ops->write(tty, msg, strlen(msg));
4b41b953 1207 tty_unlock(tty);
95f9bfc6
AC
1208 tty_write_unlock(tty);
1209 }
95f9bfc6
AC
1210 return;
1211}
1212
1da177e4 1213
af9b897e
AC
1214/**
1215 * tty_write - write method for tty device file
1216 * @file: tty file pointer
1217 * @buf: user data to write
1218 * @count: bytes to write
1219 * @ppos: unused
1220 *
1221 * Write data to a tty device via the line discipline.
1222 *
1223 * Locking:
1224 * Locks the line discipline as required
1225 * Writes to the tty driver are serialized by the atomic_write_lock
1226 * and are then processed in chunks to the device. The line discipline
a88a69c9 1227 * write method will not be invoked in parallel for each device.
af9b897e
AC
1228 */
1229
37bdfb07
AC
1230static ssize_t tty_write(struct file *file, const char __user *buf,
1231 size_t count, loff_t *ppos)
1da177e4 1232{
d996b62a
NP
1233 struct tty_struct *tty = file_tty(file);
1234 struct tty_ldisc *ld;
1da177e4 1235 ssize_t ret;
37bdfb07 1236
6131ffaa 1237 if (tty_paranoia_check(tty, file_inode(file), "tty_write"))
1da177e4 1238 return -EIO;
f34d7a5b 1239 if (!tty || !tty->ops->write ||
37bdfb07
AC
1240 (test_bit(TTY_IO_ERROR, &tty->flags)))
1241 return -EIO;
f34d7a5b
AC
1242 /* Short term debug to catch buggy drivers */
1243 if (tty->ops->write_room == NULL)
339f36ba 1244 tty_err(tty, "missing write_room method\n");
37bdfb07 1245 ld = tty_ldisc_ref_wait(tty);
e55afd11
PH
1246 if (!ld)
1247 return hung_up_tty_write(file, buf, count, ppos);
a352def2 1248 if (!ld->ops->write)
1da177e4
LT
1249 ret = -EIO;
1250 else
a352def2 1251 ret = do_tty_write(ld->ops->write, tty, file, buf, count);
1da177e4
LT
1252 tty_ldisc_deref(ld);
1253 return ret;
1254}
1255
37bdfb07
AC
1256ssize_t redirected_tty_write(struct file *file, const char __user *buf,
1257 size_t count, loff_t *ppos)
1da177e4
LT
1258{
1259 struct file *p = NULL;
1260
1261 spin_lock(&redirect_lock);
cb0942b8
AV
1262 if (redirect)
1263 p = get_file(redirect);
1da177e4
LT
1264 spin_unlock(&redirect_lock);
1265
1266 if (p) {
1267 ssize_t res;
1268 res = vfs_write(p, buf, count, &p->f_pos);
1269 fput(p);
1270 return res;
1271 }
1da177e4
LT
1272 return tty_write(file, buf, count, ppos);
1273}
1274
136d5258
PH
1275/**
1276 * tty_send_xchar - send priority character
1277 *
1278 * Send a high priority character to the tty even if stopped
1279 *
1280 * Locking: none for xchar method, write ordering for write method.
1281 */
1282
1283int tty_send_xchar(struct tty_struct *tty, char ch)
1284{
1285 int was_stopped = tty->stopped;
1286
1287 if (tty->ops->send_xchar) {
ee0c1a65 1288 down_read(&tty->termios_rwsem);
136d5258 1289 tty->ops->send_xchar(tty, ch);
ee0c1a65 1290 up_read(&tty->termios_rwsem);
136d5258
PH
1291 return 0;
1292 }
1293
1294 if (tty_write_lock(tty, 0) < 0)
1295 return -ERESTARTSYS;
1296
ee0c1a65 1297 down_read(&tty->termios_rwsem);
136d5258
PH
1298 if (was_stopped)
1299 start_tty(tty);
1300 tty->ops->write(tty, &ch, 1);
1301 if (was_stopped)
1302 stop_tty(tty);
ee0c1a65 1303 up_read(&tty->termios_rwsem);
136d5258
PH
1304 tty_write_unlock(tty);
1305 return 0;
1306}
1307
1da177e4
LT
1308static char ptychar[] = "pqrstuvwxyzabcde";
1309
af9b897e
AC
1310/**
1311 * pty_line_name - generate name for a pty
1312 * @driver: the tty driver in use
1313 * @index: the minor number
1314 * @p: output buffer of at least 6 bytes
1315 *
1316 * Generate a name from a driver reference and write it to the output
1317 * buffer.
1318 *
1319 * Locking: None
1320 */
1321static void pty_line_name(struct tty_driver *driver, int index, char *p)
1da177e4
LT
1322{
1323 int i = index + driver->name_base;
1324 /* ->name is initialized to "ttyp", but "tty" is expected */
1325 sprintf(p, "%s%c%x",
37bdfb07
AC
1326 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name,
1327 ptychar[i >> 4 & 0xf], i & 0xf);
1da177e4
LT
1328}
1329
af9b897e 1330/**
8b0a88d5 1331 * tty_line_name - generate name for a tty
af9b897e
AC
1332 * @driver: the tty driver in use
1333 * @index: the minor number
1334 * @p: output buffer of at least 7 bytes
1335 *
1336 * Generate a name from a driver reference and write it to the output
5c0a2450 1337 * buffer.
af9b897e
AC
1338 *
1339 * Locking: None
1340 */
723abd87 1341static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p)
1da177e4 1342{
0019b408 1343 if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE)
723abd87 1344 return sprintf(p, "%s", driver->name);
0019b408 1345 else
723abd87
HR
1346 return sprintf(p, "%s%d", driver->name,
1347 index + driver->name_base);
1da177e4
LT
1348}
1349
99f1fe18
AC
1350/**
1351 * tty_driver_lookup_tty() - find an existing tty, if any
1352 * @driver: the driver for the tty
1353 * @idx: the minor number
23499705 1354 *
aa3cb814
PH
1355 * Return the tty, if found. If not found, return NULL or ERR_PTR() if the
1356 * driver lookup() method returns an error.
23499705 1357 *
aa3cb814 1358 * Locking: tty_mutex must be held. If the tty is found, bump the tty kref.
23499705 1359 */
a47d545f 1360static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver,
15f1a633 1361 struct inode *inode, int idx)
23499705 1362{
aa3cb814
PH
1363 struct tty_struct *tty;
1364
99f1fe18 1365 if (driver->ops->lookup)
aa3cb814
PH
1366 tty = driver->ops->lookup(driver, inode, idx);
1367 else
1368 tty = driver->ttys[idx];
23499705 1369
aa3cb814
PH
1370 if (!IS_ERR(tty))
1371 tty_kref_get(tty);
1372 return tty;
23499705
SB
1373}
1374
bf970ee4
AC
1375/**
1376 * tty_init_termios - helper for termios setup
1377 * @tty: the tty to set up
1378 *
1379 * Initialise the termios structures for this tty. Thus runs under
1380 * the tty_mutex currently so we can be relaxed about ordering.
1381 */
1382
a3123fd0 1383void tty_init_termios(struct tty_struct *tty)
bf970ee4 1384{
fe6e29fd 1385 struct ktermios *tp;
bf970ee4
AC
1386 int idx = tty->index;
1387
36b3c070
AC
1388 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
1389 tty->termios = tty->driver->init_termios;
1390 else {
1391 /* Check for lazy saved data */
1392 tp = tty->driver->termios[idx];
ece53405 1393 if (tp != NULL) {
36b3c070 1394 tty->termios = *tp;
ece53405
PH
1395 tty->termios.c_line = tty->driver->init_termios.c_line;
1396 } else
36b3c070 1397 tty->termios = tty->driver->init_termios;
bf970ee4 1398 }
bf970ee4 1399 /* Compatibility until drivers always set this */
adc8d746
AC
1400 tty->termios.c_ispeed = tty_termios_input_baud_rate(&tty->termios);
1401 tty->termios.c_ospeed = tty_termios_baud_rate(&tty->termios);
bf970ee4 1402}
fe1ae7fd 1403EXPORT_SYMBOL_GPL(tty_init_termios);
bf970ee4 1404
66d450e8
JS
1405int tty_standard_install(struct tty_driver *driver, struct tty_struct *tty)
1406{
a3123fd0 1407 tty_init_termios(tty);
66d450e8
JS
1408 tty_driver_kref_get(driver);
1409 tty->count++;
1410 driver->ttys[tty->index] = tty;
1411 return 0;
1412}
1413EXPORT_SYMBOL_GPL(tty_standard_install);
1414
99f1fe18 1415/**
8b0a88d5
AC
1416 * tty_driver_install_tty() - install a tty entry in the driver
1417 * @driver: the driver for the tty
1418 * @tty: the tty
1419 *
1420 * Install a tty object into the driver tables. The tty->index field
bf970ee4
AC
1421 * will be set by the time this is called. This method is responsible
1422 * for ensuring any need additional structures are allocated and
1423 * configured.
8b0a88d5
AC
1424 *
1425 * Locking: tty_mutex for now
1426 */
1427static int tty_driver_install_tty(struct tty_driver *driver,
1428 struct tty_struct *tty)
1429{
66d450e8
JS
1430 return driver->ops->install ? driver->ops->install(driver, tty) :
1431 tty_standard_install(driver, tty);
8b0a88d5
AC
1432}
1433
1434/**
1435 * tty_driver_remove_tty() - remove a tty from the driver tables
1436 * @driver: the driver for the tty
1437 * @idx: the minor number
1438 *
1439 * Remvoe a tty object from the driver tables. The tty->index field
1440 * will be set by the time this is called.
1441 *
1442 * Locking: tty_mutex for now
1443 */
05de87ed 1444static void tty_driver_remove_tty(struct tty_driver *driver, struct tty_struct *tty)
8b0a88d5
AC
1445{
1446 if (driver->ops->remove)
1447 driver->ops->remove(driver, tty);
1448 else
1449 driver->ttys[tty->index] = NULL;
1450}
1451
1452/*
1453 * tty_reopen() - fast re-open of an open tty
1454 * @tty - the tty to open
23499705 1455 *
99f1fe18 1456 * Return 0 on success, -errno on error.
5d93e748 1457 * Re-opens on master ptys are not allowed and return -EIO.
23499705 1458 *
5d93e748 1459 * Locking: Caller must hold tty_lock
23499705 1460 */
99f1fe18 1461static int tty_reopen(struct tty_struct *tty)
23499705
SB
1462{
1463 struct tty_driver *driver = tty->driver;
1464
23499705 1465 if (driver->type == TTY_DRIVER_TYPE_PTY &&
5d93e748
PH
1466 driver->subtype == PTY_TYPE_MASTER)
1467 return -EIO;
23499705 1468
7f22f6c9
PH
1469 if (!tty->count)
1470 return -EAGAIN;
1471
86f2c00f
PH
1472 if (test_bit(TTY_EXCLUSIVE, &tty->flags) && !capable(CAP_SYS_ADMIN))
1473 return -EBUSY;
1474
23499705 1475 tty->count++;
23499705 1476
892d1fa7
PH
1477 if (!tty->ldisc)
1478 return tty_ldisc_reinit(tty, tty->termios.c_line);
23499705
SB
1479
1480 return 0;
1481}
1482
af9b897e 1483/**
d81ed103 1484 * tty_init_dev - initialise a tty device
af9b897e
AC
1485 * @driver: tty driver we are opening a device on
1486 * @idx: device index
15582d36 1487 * @ret_tty: returned tty structure
af9b897e
AC
1488 *
1489 * Prepare a tty device. This may not be a "new" clean device but
1490 * could also be an active device. The pty drivers require special
1491 * handling because of this.
1492 *
1493 * Locking:
1494 * The function is called under the tty_mutex, which
1495 * protects us from the tty struct or driver itself going away.
1496 *
1497 * On exit the tty device has the line discipline attached and
1498 * a reference count of 1. If a pair was created for pty/tty use
1499 * and the other was a pty master then it too has a reference count of 1.
1500 *
1da177e4 1501 * WSH 06/09/97: Rewritten to remove races and properly clean up after a
70522e12
IM
1502 * failed open. The new code protects the open with a mutex, so it's
1503 * really quite straightforward. The mutex locking can probably be
1da177e4
LT
1504 * relaxed for the (most common) case of reopening a tty.
1505 */
af9b897e 1506
593a27c4 1507struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx)
1da177e4 1508{
bf970ee4 1509 struct tty_struct *tty;
73ec06fc 1510 int retval;
1da177e4 1511
1da177e4
LT
1512 /*
1513 * First time open is complex, especially for PTY devices.
1514 * This code guarantees that either everything succeeds and the
1515 * TTY is ready for operation, or else the table slots are vacated
37bdfb07 1516 * and the allocated memory released. (Except that the termios
1da177e4
LT
1517 * and locked termios may be retained.)
1518 */
1519
73ec06fc
AC
1520 if (!try_module_get(driver->owner))
1521 return ERR_PTR(-ENODEV);
1da177e4 1522
2c964a2f 1523 tty = alloc_tty_struct(driver, idx);
d5543503
JS
1524 if (!tty) {
1525 retval = -ENOMEM;
1526 goto err_module_put;
1527 }
1da177e4 1528
89c8d91e 1529 tty_lock(tty);
73ec06fc 1530 retval = tty_driver_install_tty(driver, tty);
d5543503 1531 if (retval < 0)
c8b710b3 1532 goto err_free_tty;
8b0a88d5 1533
04831dc1
JS
1534 if (!tty->port)
1535 tty->port = driver->ports[idx];
1536
5d4121c0
JS
1537 WARN_RATELIMIT(!tty->port,
1538 "%s: %s driver does not set tty->port. This will crash the kernel later. Fix the driver!\n",
1539 __func__, tty->driver->name);
1540
967fab69
JS
1541 tty->port->itty = tty;
1542
37bdfb07 1543 /*
1da177e4 1544 * Structures all installed ... call the ldisc open routines.
d5698c28
CH
1545 * If we fail here just call release_tty to clean up. No need
1546 * to decrement the use counts, as release_tty doesn't care.
1da177e4 1547 */
bf970ee4 1548 retval = tty_ldisc_setup(tty, tty->link);
01e1abb2 1549 if (retval)
d5543503 1550 goto err_release_tty;
89c8d91e 1551 /* Return the tty locked so that it cannot vanish under the caller */
73ec06fc 1552 return tty;
1da177e4 1553
c8b710b3 1554err_free_tty:
89c8d91e 1555 tty_unlock(tty);
d5543503
JS
1556 free_tty_struct(tty);
1557err_module_put:
1da177e4 1558 module_put(driver->owner);
d5543503 1559 return ERR_PTR(retval);
1da177e4 1560
d5698c28 1561 /* call the tty release_tty routine to clean out this slot */
d5543503 1562err_release_tty:
89c8d91e 1563 tty_unlock(tty);
339f36ba
PH
1564 tty_info_ratelimited(tty, "ldisc open failed (%d), clearing slot %d\n",
1565 retval, idx);
d5698c28 1566 release_tty(tty, idx);
73ec06fc 1567 return ERR_PTR(retval);
1da177e4
LT
1568}
1569
a3123fd0 1570static void tty_free_termios(struct tty_struct *tty)
feebed65
AC
1571{
1572 struct ktermios *tp;
1573 int idx = tty->index;
36b3c070
AC
1574
1575 /* If the port is going to reset then it has no termios to save */
1576 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
1577 return;
1578
1579 /* Stash the termios data */
1580 tp = tty->driver->termios[idx];
1581 if (tp == NULL) {
1582 tp = kmalloc(sizeof(struct ktermios), GFP_KERNEL);
25080652 1583 if (tp == NULL)
36b3c070 1584 return;
4ac5d705 1585 tty->driver->termios[idx] = tp;
feebed65 1586 }
36b3c070 1587 *tp = tty->termios;
feebed65 1588}
feebed65 1589
a2965b7b 1590/**
949aa64f
PH
1591 * tty_flush_works - flush all works of a tty/pty pair
1592 * @tty: tty device to flush works for (or either end of a pty pair)
a2965b7b 1593 *
949aa64f 1594 * Sync flush all works belonging to @tty (and the 'other' tty).
a2965b7b
PH
1595 */
1596static void tty_flush_works(struct tty_struct *tty)
1597{
1598 flush_work(&tty->SAK_work);
1599 flush_work(&tty->hangup_work);
949aa64f
PH
1600 if (tty->link) {
1601 flush_work(&tty->link->SAK_work);
1602 flush_work(&tty->link->hangup_work);
1603 }
a2965b7b 1604}
feebed65 1605
af9b897e 1606/**
d5698c28 1607 * release_one_tty - release tty structure memory
9c9f4ded 1608 * @kref: kref of tty we are obliterating
af9b897e
AC
1609 *
1610 * Releases memory associated with a tty structure, and clears out the
1611 * driver table slots. This function is called when a device is no longer
1612 * in use. It also gets called when setup of a device fails.
1613 *
1614 * Locking:
af9b897e
AC
1615 * takes the file list lock internally when working on the list
1616 * of ttys that the driver keeps.
b50989dc
AC
1617 *
1618 * This method gets called from a work queue so that the driver private
f278a2f7 1619 * cleanup ops can sleep (needed for USB at least)
1da177e4 1620 */
b50989dc 1621static void release_one_tty(struct work_struct *work)
1da177e4 1622{
b50989dc
AC
1623 struct tty_struct *tty =
1624 container_of(work, struct tty_struct, hangup_work);
6f967f78 1625 struct tty_driver *driver = tty->driver;
b216df53 1626 struct module *owner = driver->owner;
d5698c28 1627
f278a2f7
DY
1628 if (tty->ops->cleanup)
1629 tty->ops->cleanup(tty);
1630
1da177e4 1631 tty->magic = 0;
7d7b93c1 1632 tty_driver_kref_put(driver);
b216df53 1633 module_put(owner);
d5698c28 1634
ee2ffa0d 1635 spin_lock(&tty_files_lock);
1da177e4 1636 list_del_init(&tty->tty_files);
ee2ffa0d 1637 spin_unlock(&tty_files_lock);
d5698c28 1638
6da8d866
ON
1639 put_pid(tty->pgrp);
1640 put_pid(tty->session);
1da177e4
LT
1641 free_tty_struct(tty);
1642}
1643
b50989dc
AC
1644static void queue_release_one_tty(struct kref *kref)
1645{
1646 struct tty_struct *tty = container_of(kref, struct tty_struct, kref);
f278a2f7 1647
b50989dc
AC
1648 /* The hangup queue is now free so we can reuse it rather than
1649 waste a chunk of memory for each port */
1650 INIT_WORK(&tty->hangup_work, release_one_tty);
1651 schedule_work(&tty->hangup_work);
1652}
1653
9c9f4ded
AC
1654/**
1655 * tty_kref_put - release a tty kref
1656 * @tty: tty device
1657 *
1658 * Release a reference to a tty device and if need be let the kref
1659 * layer destruct the object for us
1660 */
1661
1662void tty_kref_put(struct tty_struct *tty)
1663{
1664 if (tty)
b50989dc 1665 kref_put(&tty->kref, queue_release_one_tty);
9c9f4ded
AC
1666}
1667EXPORT_SYMBOL(tty_kref_put);
1668
d5698c28
CH
1669/**
1670 * release_tty - release tty structure memory
1671 *
1672 * Release both @tty and a possible linked partner (think pty pair),
1673 * and decrement the refcount of the backing module.
1674 *
1675 * Locking:
d155255a 1676 * tty_mutex
d5698c28
CH
1677 * takes the file list lock internally when working on the list
1678 * of ttys that the driver keeps.
9c9f4ded 1679 *
d5698c28
CH
1680 */
1681static void release_tty(struct tty_struct *tty, int idx)
1682{
9c9f4ded
AC
1683 /* This should always be true but check for the moment */
1684 WARN_ON(tty->index != idx);
d155255a 1685 WARN_ON(!mutex_is_locked(&tty_mutex));
36b3c070
AC
1686 if (tty->ops->shutdown)
1687 tty->ops->shutdown(tty);
1688 tty_free_termios(tty);
1689 tty_driver_remove_tty(tty->driver, tty);
967fab69 1690 tty->port->itty = NULL;
64e377dc
PH
1691 if (tty->link)
1692 tty->link->port->itty = NULL;
e176058f 1693 tty_buffer_cancel_work(tty->port);
36b3c070 1694
a211b1af 1695 tty_kref_put(tty->link);
9c9f4ded 1696 tty_kref_put(tty);
d5698c28
CH
1697}
1698
955787ca
JS
1699/**
1700 * tty_release_checks - check a tty before real release
1701 * @tty: tty to check
1702 * @o_tty: link of @tty (if any)
1703 * @idx: index of the tty
1704 *
1705 * Performs some paranoid checking before true release of the @tty.
1706 * This is a no-op unless TTY_PARANOIA_CHECK is defined.
1707 */
359b9fb5 1708static int tty_release_checks(struct tty_struct *tty, int idx)
955787ca
JS
1709{
1710#ifdef TTY_PARANOIA_CHECK
1711 if (idx < 0 || idx >= tty->driver->num) {
e2dfa3d3 1712 tty_debug(tty, "bad idx %d\n", idx);
955787ca
JS
1713 return -1;
1714 }
1715
1716 /* not much to check for devpts */
1717 if (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)
1718 return 0;
1719
1720 if (tty != tty->driver->ttys[idx]) {
e2dfa3d3
PH
1721 tty_debug(tty, "bad driver table[%d] = %p\n",
1722 idx, tty->driver->ttys[idx]);
955787ca
JS
1723 return -1;
1724 }
955787ca 1725 if (tty->driver->other) {
359b9fb5
PH
1726 struct tty_struct *o_tty = tty->link;
1727
955787ca 1728 if (o_tty != tty->driver->other->ttys[idx]) {
e2dfa3d3
PH
1729 tty_debug(tty, "bad other table[%d] = %p\n",
1730 idx, tty->driver->other->ttys[idx]);
955787ca
JS
1731 return -1;
1732 }
955787ca 1733 if (o_tty->link != tty) {
e2dfa3d3 1734 tty_debug(tty, "bad link = %p\n", o_tty->link);
955787ca
JS
1735 return -1;
1736 }
1737 }
1738#endif
1739 return 0;
1740}
1741
eeb89d91
AC
1742/**
1743 * tty_release - vfs callback for close
1744 * @inode: inode of tty
1745 * @filp: file pointer for handle to tty
1746 *
1747 * Called the last time each file handle is closed that references
1748 * this tty. There may however be several such references.
1749 *
1750 * Locking:
1751 * Takes bkl. See tty_release_dev
1752 *
1da177e4
LT
1753 * Even releasing the tty structures is a tricky business.. We have
1754 * to be very careful that the structures are all released at the
1755 * same time, as interrupts might otherwise get the wrong pointers.
1756 *
1757 * WSH 09/09/97: rewritten to avoid some nasty race conditions that could
1758 * lead to double frees or releasing memory still in use.
1759 */
eeb89d91
AC
1760
1761int tty_release(struct inode *inode, struct file *filp)
1da177e4 1762{
d996b62a 1763 struct tty_struct *tty = file_tty(filp);
7ffb6da9
PH
1764 struct tty_struct *o_tty = NULL;
1765 int do_sleep, final;
1da177e4 1766 int idx;
37b16457 1767 long timeout = 0;
494c1eac 1768 int once = 1;
37bdfb07 1769
9de44bd6 1770 if (tty_paranoia_check(tty, inode, __func__))
eeb89d91 1771 return 0;
1da177e4 1772
89c8d91e 1773 tty_lock(tty);
9de44bd6 1774 check_tty_count(tty, __func__);
1da177e4 1775
ec79d605 1776 __tty_fasync(-1, filp, 0);
1da177e4
LT
1777
1778 idx = tty->index;
7ffb6da9
PH
1779 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
1780 tty->driver->subtype == PTY_TYPE_MASTER)
1781 o_tty = tty->link;
1da177e4 1782
359b9fb5 1783 if (tty_release_checks(tty, idx)) {
89c8d91e 1784 tty_unlock(tty);
eeb89d91 1785 return 0;
1da177e4 1786 }
1da177e4 1787
d435cefe 1788 tty_debug_hangup(tty, "releasing (count=%d)\n", tty->count);
1da177e4 1789
f34d7a5b
AC
1790 if (tty->ops->close)
1791 tty->ops->close(tty, filp);
1da177e4 1792
2aff5e2b
PH
1793 /* If tty is pty master, lock the slave pty (stable lock order) */
1794 tty_lock_slave(o_tty);
1795
1da177e4
LT
1796 /*
1797 * Sanity check: if tty->count is going to zero, there shouldn't be
1798 * any waiters on tty->read_wait or tty->write_wait. We test the
1799 * wait queues and kick everyone out _before_ actually starting to
1800 * close. This ensures that we won't block while releasing the tty
1801 * structure.
1802 *
1803 * The test for the o_tty closing is necessary, since the master and
1804 * slave sides may close in any order. If the slave side closes out
1805 * first, its count will be one, since the master side holds an open.
324c1650 1806 * Thus this test wouldn't be triggered at the time the slave closed,
1da177e4 1807 * so we do it now.
1da177e4
LT
1808 */
1809 while (1) {
1da177e4
LT
1810 do_sleep = 0;
1811
324c1650 1812 if (tty->count <= 1) {
1da177e4 1813 if (waitqueue_active(&tty->read_wait)) {
4b19449d 1814 wake_up_poll(&tty->read_wait, POLLIN);
1da177e4
LT
1815 do_sleep++;
1816 }
1817 if (waitqueue_active(&tty->write_wait)) {
4b19449d 1818 wake_up_poll(&tty->write_wait, POLLOUT);
1da177e4
LT
1819 do_sleep++;
1820 }
1821 }
7ffb6da9 1822 if (o_tty && o_tty->count <= 1) {
1da177e4 1823 if (waitqueue_active(&o_tty->read_wait)) {
4b19449d 1824 wake_up_poll(&o_tty->read_wait, POLLIN);
1da177e4
LT
1825 do_sleep++;
1826 }
1827 if (waitqueue_active(&o_tty->write_wait)) {
4b19449d 1828 wake_up_poll(&o_tty->write_wait, POLLOUT);
1da177e4
LT
1829 do_sleep++;
1830 }
1831 }
1832 if (!do_sleep)
1833 break;
1834
494c1eac
PH
1835 if (once) {
1836 once = 0;
339f36ba 1837 tty_warn(tty, "read/write wait queue active!\n");
494c1eac 1838 }
37b16457
PH
1839 schedule_timeout_killable(timeout);
1840 if (timeout < 120 * HZ)
1841 timeout = 2 * timeout + 1;
1842 else
1843 timeout = MAX_SCHEDULE_TIMEOUT;
37bdfb07 1844 }
1da177e4 1845
7ffb6da9 1846 if (o_tty) {
1da177e4 1847 if (--o_tty->count < 0) {
339f36ba 1848 tty_warn(tty, "bad slave count (%d)\n", o_tty->count);
1da177e4
LT
1849 o_tty->count = 0;
1850 }
1851 }
1852 if (--tty->count < 0) {
339f36ba 1853 tty_warn(tty, "bad tty->count (%d)\n", tty->count);
1da177e4
LT
1854 tty->count = 0;
1855 }
37bdfb07 1856
1da177e4
LT
1857 /*
1858 * We've decremented tty->count, so we need to remove this file
1859 * descriptor off the tty->tty_files list; this serves two
1860 * purposes:
1861 * - check_tty_count sees the correct number of file descriptors
1862 * associated with this tty.
1863 * - do_tty_hangup no longer sees this file descriptor as
1864 * something that needs to be handled for hangups.
1865 */
d996b62a 1866 tty_del_file(filp);
1da177e4
LT
1867
1868 /*
1869 * Perform some housekeeping before deciding whether to return.
1870 *
1da177e4
LT
1871 * If _either_ side is closing, make sure there aren't any
1872 * processes that still think tty or o_tty is their controlling
1873 * tty.
1874 */
324c1650 1875 if (!tty->count) {
1da177e4 1876 read_lock(&tasklist_lock);
24ec839c 1877 session_clear_tty(tty->session);
7ffb6da9 1878 if (o_tty)
24ec839c 1879 session_clear_tty(o_tty->session);
1da177e4
LT
1880 read_unlock(&tasklist_lock);
1881 }
1882
324c1650 1883 /* check whether both sides are closing ... */
7ffb6da9 1884 final = !tty->count && !(o_tty && o_tty->count);
324c1650 1885
2aff5e2b
PH
1886 tty_unlock_slave(o_tty);
1887 tty_unlock(tty);
1888
04980706 1889 /* At this point, the tty->count == 0 should ensure a dead tty
d155255a 1890 cannot be re-opened by a racing opener */
da965822 1891
324c1650 1892 if (!final)
eeb89d91 1893 return 0;
37bdfb07 1894
accff793 1895 tty_debug_hangup(tty, "final close\n");
1da177e4 1896 /*
01e1abb2 1897 * Ask the line discipline code to release its structures
1da177e4 1898 */
62462aef 1899 tty_ldisc_release(tty);
a2965b7b
PH
1900
1901 /* Wait for pending work before tty destruction commmences */
1902 tty_flush_works(tty);
a2965b7b 1903
d435cefe 1904 tty_debug_hangup(tty, "freeing structure\n");
1da177e4 1905 /*
d5698c28 1906 * The release_tty function takes care of the details of clearing
89c8d91e
AC
1907 * the slots and preserving the termios structure. The tty_unlock_pair
1908 * should be safe as we keep a kref while the tty is locked (so the
1909 * unlock never unlocks a freed tty).
1da177e4 1910 */
d155255a 1911 mutex_lock(&tty_mutex);
d5698c28 1912 release_tty(tty, idx);
d155255a 1913 mutex_unlock(&tty_mutex);
1da177e4 1914
eeb89d91 1915 return 0;
1da177e4
LT
1916}
1917
b82154ac 1918/**
52494eeb 1919 * tty_open_current_tty - get locked tty of current task
b82154ac
JS
1920 * @device: device number
1921 * @filp: file pointer to tty
52494eeb
PH
1922 * @return: locked tty of the current task iff @device is /dev/tty
1923 *
1924 * Performs a re-open of the current task's controlling tty.
b82154ac
JS
1925 *
1926 * We cannot return driver and index like for the other nodes because
1927 * devpts will not work then. It expects inodes to be from devpts FS.
1928 */
1929static struct tty_struct *tty_open_current_tty(dev_t device, struct file *filp)
1930{
1931 struct tty_struct *tty;
52494eeb 1932 int retval;
b82154ac
JS
1933
1934 if (device != MKDEV(TTYAUX_MAJOR, 0))
1935 return NULL;
1936
1937 tty = get_current_tty();
1938 if (!tty)
1939 return ERR_PTR(-ENXIO);
1940
1941 filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */
1942 /* noctty = 1; */
52494eeb
PH
1943 tty_lock(tty);
1944 tty_kref_put(tty); /* safe to drop the kref now */
1945
1946 retval = tty_reopen(tty);
1947 if (retval < 0) {
1948 tty_unlock(tty);
1949 tty = ERR_PTR(retval);
1950 }
b82154ac
JS
1951 return tty;
1952}
1953
5b5e7040
JS
1954/**
1955 * tty_lookup_driver - lookup a tty driver for a given device file
1956 * @device: device number
1957 * @filp: file pointer to tty
1958 * @noctty: set if the device should not become a controlling tty
1959 * @index: index for the device in the @return driver
1960 * @return: driver for this inode (with increased refcount)
1961 *
1962 * If @return is not erroneous, the caller is responsible to decrement the
1963 * refcount by tty_driver_kref_put.
1964 *
1965 * Locking: tty_mutex protects get_tty_driver
1966 */
1967static struct tty_driver *tty_lookup_driver(dev_t device, struct file *filp,
11e1d4aa 1968 int *index)
5b5e7040
JS
1969{
1970 struct tty_driver *driver;
1971
2cd0050c 1972 switch (device) {
5b5e7040 1973#ifdef CONFIG_VT
2cd0050c 1974 case MKDEV(TTY_MAJOR, 0): {
5b5e7040
JS
1975 extern struct tty_driver *console_driver;
1976 driver = tty_driver_kref_get(console_driver);
1977 *index = fg_console;
2cd0050c 1978 break;
5b5e7040
JS
1979 }
1980#endif
2cd0050c 1981 case MKDEV(TTYAUX_MAJOR, 1): {
5b5e7040
JS
1982 struct tty_driver *console_driver = console_device(index);
1983 if (console_driver) {
1984 driver = tty_driver_kref_get(console_driver);
1985 if (driver) {
1986 /* Don't let /dev/console block */
1987 filp->f_flags |= O_NONBLOCK;
2cd0050c 1988 break;
5b5e7040
JS
1989 }
1990 }
1991 return ERR_PTR(-ENODEV);
1992 }
2cd0050c
JS
1993 default:
1994 driver = get_tty_driver(device, index);
1995 if (!driver)
1996 return ERR_PTR(-ENODEV);
1997 break;
1998 }
5b5e7040
JS
1999 return driver;
2000}
2001
d6203d0c
PH
2002/**
2003 * tty_open_by_driver - open a tty device
2004 * @device: dev_t of device to open
2005 * @inode: inode of device file
2006 * @filp: file pointer to tty
2007 *
2008 * Performs the driver lookup, checks for a reopen, or otherwise
2009 * performs the first-time tty initialization.
2010 *
2011 * Returns the locked initialized or re-opened &tty_struct
2012 *
2013 * Claims the global tty_mutex to serialize:
2014 * - concurrent first-time tty initialization
2015 * - concurrent tty driver removal w/ lookup
2016 * - concurrent tty removal from driver table
2017 */
2018static struct tty_struct *tty_open_by_driver(dev_t device, struct inode *inode,
2019 struct file *filp)
2020{
2021 struct tty_struct *tty;
2022 struct tty_driver *driver = NULL;
2023 int index = -1;
2024 int retval;
2025
2026 mutex_lock(&tty_mutex);
2027 driver = tty_lookup_driver(device, filp, &index);
2028 if (IS_ERR(driver)) {
2029 mutex_unlock(&tty_mutex);
2030 return ERR_CAST(driver);
2031 }
2032
2033 /* check whether we're reopening an existing tty */
2034 tty = tty_driver_lookup_tty(driver, inode, index);
2035 if (IS_ERR(tty)) {
2036 mutex_unlock(&tty_mutex);
2037 goto out;
2038 }
2039
2040 if (tty) {
2041 mutex_unlock(&tty_mutex);
2042 retval = tty_lock_interruptible(tty);
2043 if (retval) {
2044 if (retval == -EINTR)
2045 retval = -ERESTARTSYS;
2046 tty = ERR_PTR(retval);
2047 goto out;
2048 }
2049 /* safe to drop the kref from tty_driver_lookup_tty() */
2050 tty_kref_put(tty);
2051 retval = tty_reopen(tty);
2052 if (retval < 0) {
2053 tty_unlock(tty);
2054 tty = ERR_PTR(retval);
2055 }
2056 } else { /* Returns with the tty_lock held for now */
2057 tty = tty_init_dev(driver, index);
2058 mutex_unlock(&tty_mutex);
2059 }
2060out:
2061 tty_driver_kref_put(driver);
2062 return tty;
2063}
2064
af9b897e 2065/**
eeb89d91 2066 * tty_open - open a tty device
af9b897e
AC
2067 * @inode: inode of device file
2068 * @filp: file pointer to tty
1da177e4 2069 *
af9b897e
AC
2070 * tty_open and tty_release keep up the tty count that contains the
2071 * number of opens done on a tty. We cannot use the inode-count, as
2072 * different inodes might point to the same tty.
1da177e4 2073 *
af9b897e
AC
2074 * Open-counting is needed for pty masters, as well as for keeping
2075 * track of serial lines: DTR is dropped when the last close happens.
2076 * (This is not done solely through tty->count, now. - Ted 1/27/92)
2077 *
2078 * The termios state of a pty is reset on first open so that
2079 * settings don't persist across reuse.
2080 *
5b5e7040 2081 * Locking: tty_mutex protects tty, tty_lookup_driver and tty_init_dev.
24ec839c
PZ
2082 * tty->count should protect the rest.
2083 * ->siglock protects ->signal/->sighand
89c8d91e
AC
2084 *
2085 * Note: the tty_unlock/lock cases without a ref are only safe due to
2086 * tty_mutex
1da177e4 2087 */
af9b897e 2088
eeb89d91 2089static int tty_open(struct inode *inode, struct file *filp)
1da177e4 2090{
b82154ac 2091 struct tty_struct *tty;
1da177e4 2092 int noctty, retval;
1da177e4 2093 dev_t device = inode->i_rdev;
846c151a 2094 unsigned saved_flags = filp->f_flags;
1da177e4
LT
2095
2096 nonseekable_open(inode, filp);
37bdfb07 2097
1da177e4 2098retry_open:
fa90e1c9
JS
2099 retval = tty_alloc_file(filp);
2100 if (retval)
2101 return -ENOMEM;
2102
b82154ac 2103 tty = tty_open_current_tty(device, filp);
d6203d0c
PH
2104 if (!tty)
2105 tty = tty_open_by_driver(device, inode, filp);
52494eeb 2106
eeb89d91 2107 if (IS_ERR(tty)) {
d6203d0c 2108 tty_free_file(filp);
ba5db448 2109 retval = PTR_ERR(tty);
7f22f6c9 2110 if (retval != -EAGAIN || signal_pending(current))
d6203d0c 2111 return retval;
7f22f6c9
PH
2112 schedule();
2113 goto retry_open;
eeb89d91 2114 }
1da177e4 2115
fa90e1c9 2116 tty_add_file(tty, filp);
d996b62a 2117
9de44bd6 2118 check_tty_count(tty, __func__);
d435cefe 2119 tty_debug_hangup(tty, "opening (count=%d)\n", tty->count);
accff793 2120
909bc774
HRK
2121 if (tty->ops->open)
2122 retval = tty->ops->open(tty, filp);
2123 else
2124 retval = -ENODEV;
1da177e4
LT
2125 filp->f_flags = saved_flags;
2126
1da177e4 2127 if (retval) {
d435cefe 2128 tty_debug_hangup(tty, "open error %d, releasing\n", retval);
accff793 2129
89c8d91e 2130 tty_unlock(tty); /* need to call tty_release without BTM */
eeb89d91 2131 tty_release(inode, filp);
64ba3dc3 2132 if (retval != -ERESTARTSYS)
1da177e4 2133 return retval;
64ba3dc3
AB
2134
2135 if (signal_pending(current))
1da177e4 2136 return retval;
64ba3dc3 2137
1da177e4
LT
2138 schedule();
2139 /*
2140 * Need to reset f_op in case a hangup happened.
2141 */
1256937f 2142 if (tty_hung_up_p(filp))
1da177e4
LT
2143 filp->f_op = &tty_fops;
2144 goto retry_open;
2145 }
d4855e1f 2146 clear_bit(TTY_HUPPED, &tty->flags);
eeb89d91 2147
24ec839c 2148
2c411c11 2149 read_lock(&tasklist_lock);
24ec839c 2150 spin_lock_irq(&current->sighand->siglock);
11e1d4aa
PH
2151 noctty = (filp->f_flags & O_NOCTTY) ||
2152 device == MKDEV(TTY_MAJOR, 0) ||
2153 device == MKDEV(TTYAUX_MAJOR, 1) ||
2154 (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2155 tty->driver->subtype == PTY_TYPE_MASTER);
2156
1da177e4
LT
2157 if (!noctty &&
2158 current->signal->leader &&
2159 !current->signal->tty &&
0c556271
JH
2160 tty->session == NULL) {
2161 /*
2162 * Don't let a process that only has write access to the tty
2163 * obtain the privileges associated with having a tty as
2164 * controlling terminal (being able to reopen it with full
2165 * access through /dev/tty, being able to perform pushback).
2166 * Many distributions set the group of all ttys to "tty" and
2167 * grant write-only access to all terminals for setgid tty
2168 * binaries, which should not imply full privileges on all ttys.
2169 *
2170 * This could theoretically break old code that performs open()
2171 * on a write-only file descriptor. In that case, it might be
2172 * necessary to also permit this if
2173 * inode_permission(inode, MAY_READ) == 0.
2174 */
2175 if (filp->f_mode & FMODE_READ)
2176 __proc_set_tty(tty);
2177 }
24ec839c 2178 spin_unlock_irq(&current->sighand->siglock);
2c411c11 2179 read_unlock(&tasklist_lock);
89c8d91e 2180 tty_unlock(tty);
1da177e4
LT
2181 return 0;
2182}
2183
39d95b9d
JC
2184
2185
af9b897e
AC
2186/**
2187 * tty_poll - check tty status
2188 * @filp: file being polled
2189 * @wait: poll wait structures to update
2190 *
2191 * Call the line discipline polling method to obtain the poll
2192 * status of the device.
2193 *
2194 * Locking: locks called line discipline but ldisc poll method
2195 * may be re-entered freely by other callers.
2196 */
2197
37bdfb07 2198static unsigned int tty_poll(struct file *filp, poll_table *wait)
1da177e4 2199{
d996b62a 2200 struct tty_struct *tty = file_tty(filp);
1da177e4
LT
2201 struct tty_ldisc *ld;
2202 int ret = 0;
2203
6131ffaa 2204 if (tty_paranoia_check(tty, file_inode(filp), "tty_poll"))
1da177e4 2205 return 0;
37bdfb07 2206
1da177e4 2207 ld = tty_ldisc_ref_wait(tty);
e55afd11
PH
2208 if (!ld)
2209 return hung_up_tty_poll(filp, wait);
a352def2 2210 if (ld->ops->poll)
c961bfb1 2211 ret = ld->ops->poll(tty, filp, wait);
1da177e4
LT
2212 tty_ldisc_deref(ld);
2213 return ret;
2214}
2215
ec79d605 2216static int __tty_fasync(int fd, struct file *filp, int on)
1da177e4 2217{
d996b62a 2218 struct tty_struct *tty = file_tty(filp);
f6c8dbe6 2219 struct tty_ldisc *ldisc;
47f86834 2220 unsigned long flags;
5d1e3230 2221 int retval = 0;
1da177e4 2222
6131ffaa 2223 if (tty_paranoia_check(tty, file_inode(filp), "tty_fasync"))
5d1e3230 2224 goto out;
37bdfb07 2225
1da177e4
LT
2226 retval = fasync_helper(fd, filp, on, &tty->fasync);
2227 if (retval <= 0)
5d1e3230 2228 goto out;
1da177e4 2229
f6c8dbe6
PH
2230 ldisc = tty_ldisc_ref(tty);
2231 if (ldisc) {
2232 if (ldisc->ops->fasync)
2233 ldisc->ops->fasync(tty, on);
2234 tty_ldisc_deref(ldisc);
2235 }
2236
1da177e4 2237 if (on) {
ab521dc0
EB
2238 enum pid_type type;
2239 struct pid *pid;
f6c8dbe6 2240
47f86834 2241 spin_lock_irqsave(&tty->ctrl_lock, flags);
ab521dc0
EB
2242 if (tty->pgrp) {
2243 pid = tty->pgrp;
2244 type = PIDTYPE_PGID;
2245 } else {
2246 pid = task_pid(current);
2247 type = PIDTYPE_PID;
2248 }
80e1e823 2249 get_pid(pid);
70362511 2250 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
e0b93edd 2251 __f_setown(filp, pid, type, 0);
80e1e823 2252 put_pid(pid);
e0b93edd 2253 retval = 0;
1da177e4 2254 }
5d1e3230 2255out:
ec79d605
AB
2256 return retval;
2257}
2258
2259static int tty_fasync(int fd, struct file *filp, int on)
2260{
89c8d91e 2261 struct tty_struct *tty = file_tty(filp);
ec79d605 2262 int retval;
89c8d91e
AC
2263
2264 tty_lock(tty);
ec79d605 2265 retval = __tty_fasync(fd, filp, on);
89c8d91e
AC
2266 tty_unlock(tty);
2267
5d1e3230 2268 return retval;
1da177e4
LT
2269}
2270
af9b897e
AC
2271/**
2272 * tiocsti - fake input character
2273 * @tty: tty to fake input into
2274 * @p: pointer to character
2275 *
3a4fa0a2 2276 * Fake input to a tty device. Does the necessary locking and
af9b897e
AC
2277 * input management.
2278 *
2279 * FIXME: does not honour flow control ??
2280 *
2281 * Locking:
137084bb 2282 * Called functions take tty_ldiscs_lock
af9b897e 2283 * current->signal->tty check is safe without locks
28298232
AC
2284 *
2285 * FIXME: may race normal receive processing
af9b897e
AC
2286 */
2287
1da177e4
LT
2288static int tiocsti(struct tty_struct *tty, char __user *p)
2289{
2290 char ch, mbz = 0;
2291 struct tty_ldisc *ld;
37bdfb07 2292
1da177e4
LT
2293 if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN))
2294 return -EPERM;
2295 if (get_user(ch, p))
2296 return -EFAULT;
1e641743 2297 tty_audit_tiocsti(tty, ch);
1da177e4 2298 ld = tty_ldisc_ref_wait(tty);
e55afd11
PH
2299 if (!ld)
2300 return -EIO;
a352def2 2301 ld->ops->receive_buf(tty, &ch, &mbz, 1);
1da177e4
LT
2302 tty_ldisc_deref(ld);
2303 return 0;
2304}
2305
af9b897e
AC
2306/**
2307 * tiocgwinsz - implement window query ioctl
2308 * @tty; tty
2309 * @arg: user buffer for result
2310 *
808a0d38 2311 * Copies the kernel idea of the window size into the user buffer.
af9b897e 2312 *
dee4a0be 2313 * Locking: tty->winsize_mutex is taken to ensure the winsize data
808a0d38 2314 * is consistent.
af9b897e
AC
2315 */
2316
37bdfb07 2317static int tiocgwinsz(struct tty_struct *tty, struct winsize __user *arg)
1da177e4 2318{
808a0d38
AC
2319 int err;
2320
dee4a0be 2321 mutex_lock(&tty->winsize_mutex);
808a0d38 2322 err = copy_to_user(arg, &tty->winsize, sizeof(*arg));
dee4a0be 2323 mutex_unlock(&tty->winsize_mutex);
808a0d38
AC
2324
2325 return err ? -EFAULT: 0;
1da177e4
LT
2326}
2327
af9b897e 2328/**
8c9a9dd0
AC
2329 * tty_do_resize - resize event
2330 * @tty: tty being resized
8c9a9dd0
AC
2331 * @rows: rows (character)
2332 * @cols: cols (character)
2333 *
3ad2f3fb 2334 * Update the termios variables and send the necessary signals to
8c9a9dd0 2335 * peform a terminal resize correctly
af9b897e
AC
2336 */
2337
fc6f6238 2338int tty_do_resize(struct tty_struct *tty, struct winsize *ws)
1da177e4 2339{
fc6f6238 2340 struct pid *pgrp;
1da177e4 2341
fc6f6238 2342 /* Lock the tty */
dee4a0be 2343 mutex_lock(&tty->winsize_mutex);
fc6f6238 2344 if (!memcmp(ws, &tty->winsize, sizeof(*ws)))
ca9bda00 2345 goto done;
47f86834 2346
5b239542
PH
2347 /* Signal the foreground process group */
2348 pgrp = tty_get_pgrp(tty);
47f86834
AC
2349 if (pgrp)
2350 kill_pgrp(pgrp, SIGWINCH, 1);
47f86834 2351 put_pid(pgrp);
47f86834 2352
8c9a9dd0 2353 tty->winsize = *ws;
ca9bda00 2354done:
dee4a0be 2355 mutex_unlock(&tty->winsize_mutex);
1da177e4
LT
2356 return 0;
2357}
4d334fd1 2358EXPORT_SYMBOL(tty_do_resize);
1da177e4 2359
8c9a9dd0
AC
2360/**
2361 * tiocswinsz - implement window size set ioctl
fc6f6238 2362 * @tty; tty side of tty
8c9a9dd0
AC
2363 * @arg: user buffer for result
2364 *
2365 * Copies the user idea of the window size to the kernel. Traditionally
2366 * this is just advisory information but for the Linux console it
2367 * actually has driver level meaning and triggers a VC resize.
2368 *
2369 * Locking:
25985edc 2370 * Driver dependent. The default do_resize method takes the
8c9a9dd0
AC
2371 * tty termios mutex and ctrl_lock. The console takes its own lock
2372 * then calls into the default method.
2373 */
2374
fc6f6238 2375static int tiocswinsz(struct tty_struct *tty, struct winsize __user *arg)
8c9a9dd0
AC
2376{
2377 struct winsize tmp_ws;
2378 if (copy_from_user(&tmp_ws, arg, sizeof(*arg)))
2379 return -EFAULT;
2380
2381 if (tty->ops->resize)
fc6f6238 2382 return tty->ops->resize(tty, &tmp_ws);
8c9a9dd0 2383 else
fc6f6238 2384 return tty_do_resize(tty, &tmp_ws);
8c9a9dd0
AC
2385}
2386
af9b897e
AC
2387/**
2388 * tioccons - allow admin to move logical console
2389 * @file: the file to become console
2390 *
25985edc 2391 * Allow the administrator to move the redirected console device
af9b897e
AC
2392 *
2393 * Locking: uses redirect_lock to guard the redirect information
2394 */
2395
1da177e4
LT
2396static int tioccons(struct file *file)
2397{
2398 if (!capable(CAP_SYS_ADMIN))
2399 return -EPERM;
2400 if (file->f_op->write == redirected_tty_write) {
2401 struct file *f;
2402 spin_lock(&redirect_lock);
2403 f = redirect;
2404 redirect = NULL;
2405 spin_unlock(&redirect_lock);
2406 if (f)
2407 fput(f);
2408 return 0;
2409 }
2410 spin_lock(&redirect_lock);
2411 if (redirect) {
2412 spin_unlock(&redirect_lock);
2413 return -EBUSY;
2414 }
cb0942b8 2415 redirect = get_file(file);
1da177e4
LT
2416 spin_unlock(&redirect_lock);
2417 return 0;
2418}
2419
af9b897e
AC
2420/**
2421 * fionbio - non blocking ioctl
2422 * @file: file to set blocking value
2423 * @p: user parameter
2424 *
2425 * Historical tty interfaces had a blocking control ioctl before
2426 * the generic functionality existed. This piece of history is preserved
2427 * in the expected tty API of posix OS's.
2428 *
6146b9af 2429 * Locking: none, the open file handle ensures it won't go away.
af9b897e 2430 */
1da177e4
LT
2431
2432static int fionbio(struct file *file, int __user *p)
2433{
2434 int nonblock;
2435
2436 if (get_user(nonblock, p))
2437 return -EFAULT;
2438
db1dd4d3 2439 spin_lock(&file->f_lock);
1da177e4
LT
2440 if (nonblock)
2441 file->f_flags |= O_NONBLOCK;
2442 else
2443 file->f_flags &= ~O_NONBLOCK;
db1dd4d3 2444 spin_unlock(&file->f_lock);
1da177e4
LT
2445 return 0;
2446}
2447
af9b897e
AC
2448/**
2449 * tiocsctty - set controlling tty
2450 * @tty: tty structure
2451 * @arg: user argument
2452 *
2453 * This ioctl is used to manage job control. It permits a session
2454 * leader to set this tty as the controlling tty for the session.
2455 *
2456 * Locking:
e218eb32 2457 * Takes tty_lock() to serialize proc_set_tty() for this tty
24ec839c
PZ
2458 * Takes tasklist_lock internally to walk sessions
2459 * Takes ->siglock() when updating signal->tty
af9b897e
AC
2460 */
2461
0c556271 2462static int tiocsctty(struct tty_struct *tty, struct file *file, int arg)
1da177e4 2463{
24ec839c 2464 int ret = 0;
24ec839c 2465
e218eb32 2466 tty_lock(tty);
2c411c11
PH
2467 read_lock(&tasklist_lock);
2468
2469 if (current->signal->leader && (task_session(current) == tty->session))
2470 goto unlock;
2471
1da177e4
LT
2472 /*
2473 * The process must be a session leader and
2474 * not have a controlling tty already.
2475 */
24ec839c
PZ
2476 if (!current->signal->leader || current->signal->tty) {
2477 ret = -EPERM;
2478 goto unlock;
2479 }
2480
ab521dc0 2481 if (tty->session) {
1da177e4
LT
2482 /*
2483 * This tty is already the controlling
2484 * tty for another session group!
2485 */
37bdfb07 2486 if (arg == 1 && capable(CAP_SYS_ADMIN)) {
1da177e4
LT
2487 /*
2488 * Steal it away
2489 */
24ec839c 2490 session_clear_tty(tty->session);
24ec839c
PZ
2491 } else {
2492 ret = -EPERM;
2493 goto unlock;
2494 }
1da177e4 2495 }
0c556271
JH
2496
2497 /* See the comment in tty_open(). */
2498 if ((file->f_mode & FMODE_READ) == 0 && !capable(CAP_SYS_ADMIN)) {
2499 ret = -EPERM;
2500 goto unlock;
2501 }
2502
bce65f18 2503 proc_set_tty(tty);
24ec839c 2504unlock:
2c411c11 2505 read_unlock(&tasklist_lock);
e218eb32 2506 tty_unlock(tty);
24ec839c 2507 return ret;
1da177e4
LT
2508}
2509
5d0fdf1e
AC
2510/**
2511 * tty_get_pgrp - return a ref counted pgrp pid
2512 * @tty: tty to read
2513 *
2514 * Returns a refcounted instance of the pid struct for the process
2515 * group controlling the tty.
2516 */
2517
2518struct pid *tty_get_pgrp(struct tty_struct *tty)
2519{
2520 unsigned long flags;
2521 struct pid *pgrp;
2522
2523 spin_lock_irqsave(&tty->ctrl_lock, flags);
2524 pgrp = get_pid(tty->pgrp);
2525 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2526
2527 return pgrp;
2528}
2529EXPORT_SYMBOL_GPL(tty_get_pgrp);
2530
e1c2296c
PH
2531/*
2532 * This checks not only the pgrp, but falls back on the pid if no
2533 * satisfactory pgrp is found. I dunno - gdb doesn't work correctly
2534 * without this...
2535 *
2536 * The caller must hold rcu lock or the tasklist lock.
2537 */
2538static struct pid *session_of_pgrp(struct pid *pgrp)
2539{
2540 struct task_struct *p;
2541 struct pid *sid = NULL;
2542
2543 p = pid_task(pgrp, PIDTYPE_PGID);
2544 if (p == NULL)
2545 p = pid_task(pgrp, PIDTYPE_PID);
2546 if (p != NULL)
2547 sid = task_session(p);
2548
2549 return sid;
2550}
2551
af9b897e
AC
2552/**
2553 * tiocgpgrp - get process group
2554 * @tty: tty passed by user
25985edc 2555 * @real_tty: tty side of the tty passed by the user if a pty else the tty
af9b897e
AC
2556 * @p: returned pid
2557 *
2558 * Obtain the process group of the tty. If there is no process group
2559 * return an error.
2560 *
24ec839c 2561 * Locking: none. Reference to current->signal->tty is safe.
af9b897e
AC
2562 */
2563
1da177e4
LT
2564static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2565{
5d0fdf1e
AC
2566 struct pid *pid;
2567 int ret;
1da177e4
LT
2568 /*
2569 * (tty == real_tty) is a cheap way of
2570 * testing if the tty is NOT a master pty.
2571 */
2572 if (tty == real_tty && current->signal->tty != real_tty)
2573 return -ENOTTY;
5d0fdf1e
AC
2574 pid = tty_get_pgrp(real_tty);
2575 ret = put_user(pid_vnr(pid), p);
2576 put_pid(pid);
2577 return ret;
1da177e4
LT
2578}
2579
af9b897e
AC
2580/**
2581 * tiocspgrp - attempt to set process group
2582 * @tty: tty passed by user
2583 * @real_tty: tty side device matching tty passed by user
2584 * @p: pid pointer
2585 *
2586 * Set the process group of the tty to the session passed. Only
2587 * permitted where the tty session is our session.
2588 *
47f86834 2589 * Locking: RCU, ctrl lock
af9b897e
AC
2590 */
2591
1da177e4
LT
2592static int tiocspgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2593{
04a2e6a5
EB
2594 struct pid *pgrp;
2595 pid_t pgrp_nr;
1da177e4
LT
2596 int retval = tty_check_change(real_tty);
2597
2598 if (retval == -EIO)
2599 return -ENOTTY;
2600 if (retval)
2601 return retval;
2602 if (!current->signal->tty ||
2603 (current->signal->tty != real_tty) ||
ab521dc0 2604 (real_tty->session != task_session(current)))
1da177e4 2605 return -ENOTTY;
04a2e6a5 2606 if (get_user(pgrp_nr, p))
1da177e4 2607 return -EFAULT;
04a2e6a5 2608 if (pgrp_nr < 0)
1da177e4 2609 return -EINVAL;
04a2e6a5 2610 rcu_read_lock();
b488893a 2611 pgrp = find_vpid(pgrp_nr);
04a2e6a5
EB
2612 retval = -ESRCH;
2613 if (!pgrp)
2614 goto out_unlock;
2615 retval = -EPERM;
2616 if (session_of_pgrp(pgrp) != task_session(current))
2617 goto out_unlock;
2618 retval = 0;
1e86b5bf 2619 spin_lock_irq(&tty->ctrl_lock);
ab521dc0
EB
2620 put_pid(real_tty->pgrp);
2621 real_tty->pgrp = get_pid(pgrp);
1e86b5bf 2622 spin_unlock_irq(&tty->ctrl_lock);
04a2e6a5
EB
2623out_unlock:
2624 rcu_read_unlock();
2625 return retval;
1da177e4
LT
2626}
2627
af9b897e
AC
2628/**
2629 * tiocgsid - get session id
2630 * @tty: tty passed by user
25985edc 2631 * @real_tty: tty side of the tty passed by the user if a pty else the tty
af9b897e
AC
2632 * @p: pointer to returned session id
2633 *
2634 * Obtain the session id of the tty. If there is no session
2635 * return an error.
2636 *
24ec839c 2637 * Locking: none. Reference to current->signal->tty is safe.
af9b897e
AC
2638 */
2639
1da177e4
LT
2640static int tiocgsid(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2641{
2642 /*
2643 * (tty == real_tty) is a cheap way of
2644 * testing if the tty is NOT a master pty.
2645 */
2646 if (tty == real_tty && current->signal->tty != real_tty)
2647 return -ENOTTY;
ab521dc0 2648 if (!real_tty->session)
1da177e4 2649 return -ENOTTY;
b488893a 2650 return put_user(pid_vnr(real_tty->session), p);
1da177e4
LT
2651}
2652
af9b897e
AC
2653/**
2654 * tiocsetd - set line discipline
2655 * @tty: tty device
2656 * @p: pointer to user data
2657 *
2658 * Set the line discipline according to user request.
2659 *
2660 * Locking: see tty_set_ldisc, this function is just a helper
2661 */
2662
1da177e4
LT
2663static int tiocsetd(struct tty_struct *tty, int __user *p)
2664{
c12da96f 2665 int disc;
04f378b1 2666 int ret;
1da177e4 2667
c12da96f 2668 if (get_user(disc, p))
1da177e4 2669 return -EFAULT;
04f378b1 2670
c12da96f 2671 ret = tty_set_ldisc(tty, disc);
04f378b1
AC
2672
2673 return ret;
1da177e4
LT
2674}
2675
5c17c861
PH
2676/**
2677 * tiocgetd - get line discipline
2678 * @tty: tty device
2679 * @p: pointer to user data
2680 *
2681 * Retrieves the line discipline id directly from the ldisc.
2682 *
2683 * Locking: waits for ldisc reference (in case the line discipline
2684 * is changing or the tty is being hungup)
2685 */
2686
2687static int tiocgetd(struct tty_struct *tty, int __user *p)
2688{
2689 struct tty_ldisc *ld;
2690 int ret;
2691
2692 ld = tty_ldisc_ref_wait(tty);
e55afd11
PH
2693 if (!ld)
2694 return -EIO;
5c17c861
PH
2695 ret = put_user(ld->ops->num, p);
2696 tty_ldisc_deref(ld);
2697 return ret;
2698}
2699
af9b897e
AC
2700/**
2701 * send_break - performed time break
2702 * @tty: device to break on
2703 * @duration: timeout in mS
2704 *
2705 * Perform a timed break on hardware that lacks its own driver level
2706 * timed break functionality.
2707 *
2708 * Locking:
28298232 2709 * atomic_write_lock serializes
af9b897e 2710 *
af9b897e
AC
2711 */
2712
b20f3ae5 2713static int send_break(struct tty_struct *tty, unsigned int duration)
1da177e4 2714{
9e98966c
AC
2715 int retval;
2716
2717 if (tty->ops->break_ctl == NULL)
2718 return 0;
2719
2720 if (tty->driver->flags & TTY_DRIVER_HARDWARE_BREAK)
2721 retval = tty->ops->break_ctl(tty, duration);
2722 else {
2723 /* Do the work ourselves */
2724 if (tty_write_lock(tty, 0) < 0)
2725 return -EINTR;
2726 retval = tty->ops->break_ctl(tty, -1);
2727 if (retval)
2728 goto out;
2729 if (!signal_pending(current))
2730 msleep_interruptible(duration);
2731 retval = tty->ops->break_ctl(tty, 0);
2732out:
2733 tty_write_unlock(tty);
2734 if (signal_pending(current))
2735 retval = -EINTR;
2736 }
2737 return retval;
1da177e4
LT
2738}
2739
af9b897e 2740/**
f34d7a5b 2741 * tty_tiocmget - get modem status
af9b897e
AC
2742 * @tty: tty device
2743 * @file: user file pointer
2744 * @p: pointer to result
2745 *
2746 * Obtain the modem status bits from the tty driver if the feature
2747 * is supported. Return -EINVAL if it is not available.
2748 *
2749 * Locking: none (up to the driver)
2750 */
2751
60b33c13 2752static int tty_tiocmget(struct tty_struct *tty, int __user *p)
1da177e4
LT
2753{
2754 int retval = -EINVAL;
2755
f34d7a5b 2756 if (tty->ops->tiocmget) {
60b33c13 2757 retval = tty->ops->tiocmget(tty);
1da177e4
LT
2758
2759 if (retval >= 0)
2760 retval = put_user(retval, p);
2761 }
2762 return retval;
2763}
2764
af9b897e 2765/**
f34d7a5b 2766 * tty_tiocmset - set modem status
af9b897e 2767 * @tty: tty device
af9b897e
AC
2768 * @cmd: command - clear bits, set bits or set all
2769 * @p: pointer to desired bits
2770 *
2771 * Set the modem status bits from the tty driver if the feature
2772 * is supported. Return -EINVAL if it is not available.
2773 *
2774 * Locking: none (up to the driver)
2775 */
2776
20b9d177 2777static int tty_tiocmset(struct tty_struct *tty, unsigned int cmd,
1da177e4
LT
2778 unsigned __user *p)
2779{
ae677517
AC
2780 int retval;
2781 unsigned int set, clear, val;
1da177e4 2782
ae677517
AC
2783 if (tty->ops->tiocmset == NULL)
2784 return -EINVAL;
1da177e4 2785
ae677517
AC
2786 retval = get_user(val, p);
2787 if (retval)
2788 return retval;
2789 set = clear = 0;
2790 switch (cmd) {
2791 case TIOCMBIS:
2792 set = val;
2793 break;
2794 case TIOCMBIC:
2795 clear = val;
2796 break;
2797 case TIOCMSET:
2798 set = val;
2799 clear = ~val;
2800 break;
2801 }
2802 set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2803 clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
20b9d177 2804 return tty->ops->tiocmset(tty, set, clear);
1da177e4
LT
2805}
2806
d281da7f
AC
2807static int tty_tiocgicount(struct tty_struct *tty, void __user *arg)
2808{
2809 int retval = -EINVAL;
2810 struct serial_icounter_struct icount;
2811 memset(&icount, 0, sizeof(icount));
2812 if (tty->ops->get_icount)
2813 retval = tty->ops->get_icount(tty, &icount);
2814 if (retval != 0)
2815 return retval;
2816 if (copy_to_user(arg, &icount, sizeof(icount)))
2817 return -EFAULT;
2818 return 0;
2819}
2820
8a8ae62f
JS
2821static void tty_warn_deprecated_flags(struct serial_struct __user *ss)
2822{
2823 static DEFINE_RATELIMIT_STATE(depr_flags,
2824 DEFAULT_RATELIMIT_INTERVAL,
2825 DEFAULT_RATELIMIT_BURST);
2826 char comm[TASK_COMM_LEN];
2827 int flags;
2828
2829 if (get_user(flags, &ss->flags))
2830 return;
2831
2832 flags &= ASYNC_DEPRECATED;
2833
2834 if (flags && __ratelimit(&depr_flags))
2835 pr_warning("%s: '%s' is using deprecated serial flags (with no effect): %.8x\n",
2836 __func__, get_task_comm(comm, current), flags);
2837}
2838
8f166e00
PH
2839/*
2840 * if pty, return the slave side (real_tty)
2841 * otherwise, return self
2842 */
2843static struct tty_struct *tty_pair_get_tty(struct tty_struct *tty)
e8b70e7d
AC
2844{
2845 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2846 tty->driver->subtype == PTY_TYPE_MASTER)
2847 tty = tty->link;
2848 return tty;
2849}
e8b70e7d 2850
1da177e4
LT
2851/*
2852 * Split this up, as gcc can choke on it otherwise..
2853 */
04f378b1 2854long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1da177e4 2855{
d996b62a
NP
2856 struct tty_struct *tty = file_tty(file);
2857 struct tty_struct *real_tty;
1da177e4
LT
2858 void __user *p = (void __user *)arg;
2859 int retval;
2860 struct tty_ldisc *ld;
37bdfb07 2861
6131ffaa 2862 if (tty_paranoia_check(tty, file_inode(file), "tty_ioctl"))
1da177e4
LT
2863 return -EINVAL;
2864
e8b70e7d 2865 real_tty = tty_pair_get_tty(tty);
1da177e4
LT
2866
2867 /*
2868 * Factor out some common prep work
2869 */
2870 switch (cmd) {
2871 case TIOCSETD:
2872 case TIOCSBRK:
2873 case TIOCCBRK:
2874 case TCSBRK:
37bdfb07 2875 case TCSBRKP:
1da177e4
LT
2876 retval = tty_check_change(tty);
2877 if (retval)
2878 return retval;
2879 if (cmd != TIOCCBRK) {
2880 tty_wait_until_sent(tty, 0);
2881 if (signal_pending(current))
2882 return -EINTR;
2883 }
2884 break;
2885 }
2886
9e98966c
AC
2887 /*
2888 * Now do the stuff.
2889 */
1da177e4 2890 switch (cmd) {
37bdfb07
AC
2891 case TIOCSTI:
2892 return tiocsti(tty, p);
2893 case TIOCGWINSZ:
8f520021 2894 return tiocgwinsz(real_tty, p);
37bdfb07 2895 case TIOCSWINSZ:
fc6f6238 2896 return tiocswinsz(real_tty, p);
37bdfb07
AC
2897 case TIOCCONS:
2898 return real_tty != tty ? -EINVAL : tioccons(file);
2899 case FIONBIO:
2900 return fionbio(file, p);
2901 case TIOCEXCL:
2902 set_bit(TTY_EXCLUSIVE, &tty->flags);
2903 return 0;
2904 case TIOCNXCL:
2905 clear_bit(TTY_EXCLUSIVE, &tty->flags);
2906 return 0;
84fd7bdf
CG
2907 case TIOCGEXCL:
2908 {
2909 int excl = test_bit(TTY_EXCLUSIVE, &tty->flags);
2910 return put_user(excl, (int __user *)p);
2911 }
37bdfb07
AC
2912 case TIOCNOTTY:
2913 if (current->signal->tty != tty)
2914 return -ENOTTY;
2915 no_tty();
2916 return 0;
2917 case TIOCSCTTY:
d1d3a0f7 2918 return tiocsctty(real_tty, file, arg);
37bdfb07
AC
2919 case TIOCGPGRP:
2920 return tiocgpgrp(tty, real_tty, p);
2921 case TIOCSPGRP:
2922 return tiocspgrp(tty, real_tty, p);
2923 case TIOCGSID:
2924 return tiocgsid(tty, real_tty, p);
2925 case TIOCGETD:
5c17c861 2926 return tiocgetd(tty, p);
37bdfb07
AC
2927 case TIOCSETD:
2928 return tiocsetd(tty, p);
3c95c985
KS
2929 case TIOCVHANGUP:
2930 if (!capable(CAP_SYS_ADMIN))
2931 return -EPERM;
2932 tty_vhangup(tty);
2933 return 0;
b7b8de08
WF
2934 case TIOCGDEV:
2935 {
2936 unsigned int ret = new_encode_dev(tty_devnum(real_tty));
2937 return put_user(ret, (unsigned int __user *)p);
2938 }
37bdfb07
AC
2939 /*
2940 * Break handling
2941 */
2942 case TIOCSBRK: /* Turn break on, unconditionally */
f34d7a5b 2943 if (tty->ops->break_ctl)
9e98966c 2944 return tty->ops->break_ctl(tty, -1);
37bdfb07 2945 return 0;
37bdfb07 2946 case TIOCCBRK: /* Turn break off, unconditionally */
f34d7a5b 2947 if (tty->ops->break_ctl)
9e98966c 2948 return tty->ops->break_ctl(tty, 0);
37bdfb07
AC
2949 return 0;
2950 case TCSBRK: /* SVID version: non-zero arg --> no break */
2951 /* non-zero arg means wait for all output data
2952 * to be sent (performed above) but don't send break.
2953 * This is used by the tcdrain() termios function.
2954 */
2955 if (!arg)
2956 return send_break(tty, 250);
2957 return 0;
2958 case TCSBRKP: /* support for POSIX tcsendbreak() */
2959 return send_break(tty, arg ? arg*100 : 250);
2960
2961 case TIOCMGET:
60b33c13 2962 return tty_tiocmget(tty, p);
37bdfb07
AC
2963 case TIOCMSET:
2964 case TIOCMBIC:
2965 case TIOCMBIS:
20b9d177 2966 return tty_tiocmset(tty, cmd, p);
d281da7f
AC
2967 case TIOCGICOUNT:
2968 retval = tty_tiocgicount(tty, p);
2969 /* For the moment allow fall through to the old method */
2970 if (retval != -EINVAL)
2971 return retval;
2972 break;
37bdfb07
AC
2973 case TCFLSH:
2974 switch (arg) {
2975 case TCIFLUSH:
2976 case TCIOFLUSH:
2977 /* flush tty buffer and allow ldisc to process ioctl */
86c80a8e 2978 tty_buffer_flush(tty, NULL);
c5c34d48 2979 break;
37bdfb07
AC
2980 }
2981 break;
8a8ae62f
JS
2982 case TIOCSSERIAL:
2983 tty_warn_deprecated_flags(p);
2984 break;
1da177e4 2985 }
f34d7a5b 2986 if (tty->ops->ioctl) {
c961bfb1 2987 retval = tty->ops->ioctl(tty, cmd, arg);
1da177e4
LT
2988 if (retval != -ENOIOCTLCMD)
2989 return retval;
2990 }
2991 ld = tty_ldisc_ref_wait(tty);
e55afd11
PH
2992 if (!ld)
2993 return hung_up_tty_ioctl(file, cmd, arg);
1da177e4 2994 retval = -EINVAL;
a352def2
AC
2995 if (ld->ops->ioctl) {
2996 retval = ld->ops->ioctl(tty, file, cmd, arg);
1da177e4 2997 if (retval == -ENOIOCTLCMD)
bbb63c51 2998 retval = -ENOTTY;
1da177e4
LT
2999 }
3000 tty_ldisc_deref(ld);
3001 return retval;
3002}
3003
e10cc1df 3004#ifdef CONFIG_COMPAT
37bdfb07 3005static long tty_compat_ioctl(struct file *file, unsigned int cmd,
e10cc1df
PF
3006 unsigned long arg)
3007{
d996b62a 3008 struct tty_struct *tty = file_tty(file);
e10cc1df
PF
3009 struct tty_ldisc *ld;
3010 int retval = -ENOIOCTLCMD;
3011
6131ffaa 3012 if (tty_paranoia_check(tty, file_inode(file), "tty_ioctl"))
e10cc1df
PF
3013 return -EINVAL;
3014
f34d7a5b 3015 if (tty->ops->compat_ioctl) {
c961bfb1 3016 retval = tty->ops->compat_ioctl(tty, cmd, arg);
e10cc1df
PF
3017 if (retval != -ENOIOCTLCMD)
3018 return retval;
3019 }
3020
3021 ld = tty_ldisc_ref_wait(tty);
e55afd11
PH
3022 if (!ld)
3023 return hung_up_tty_compat_ioctl(file, cmd, arg);
a352def2
AC
3024 if (ld->ops->compat_ioctl)
3025 retval = ld->ops->compat_ioctl(tty, file, cmd, arg);
8193c429
TM
3026 else
3027 retval = n_tty_compat_ioctl_helper(tty, file, cmd, arg);
e10cc1df
PF
3028 tty_ldisc_deref(ld);
3029
3030 return retval;
3031}
3032#endif
1da177e4 3033
c3c073f8
AV
3034static int this_tty(const void *t, struct file *file, unsigned fd)
3035{
3036 if (likely(file->f_op->read != tty_read))
3037 return 0;
3038 return file_tty(file) != t ? 0 : fd + 1;
3039}
3040
1da177e4
LT
3041/*
3042 * This implements the "Secure Attention Key" --- the idea is to
3043 * prevent trojan horses by killing all processes associated with this
3044 * tty when the user hits the "Secure Attention Key". Required for
3045 * super-paranoid applications --- see the Orange Book for more details.
37bdfb07 3046 *
1da177e4
LT
3047 * This code could be nicer; ideally it should send a HUP, wait a few
3048 * seconds, then send a INT, and then a KILL signal. But you then
3049 * have to coordinate with the init process, since all processes associated
3050 * with the current tty must be dead before the new getty is allowed
3051 * to spawn.
3052 *
3053 * Now, if it would be correct ;-/ The current code has a nasty hole -
3054 * it doesn't catch files in flight. We may send the descriptor to ourselves
3055 * via AF_UNIX socket, close it and later fetch from socket. FIXME.
3056 *
3057 * Nasty bug: do_SAK is being called in interrupt context. This can
3058 * deadlock. We punt it up to process context. AKPM - 16Mar2001
3059 */
8b6312f4 3060void __do_SAK(struct tty_struct *tty)
1da177e4
LT
3061{
3062#ifdef TTY_SOFT_SAK
3063 tty_hangup(tty);
3064#else
652486fb 3065 struct task_struct *g, *p;
ab521dc0 3066 struct pid *session;
1da177e4 3067 int i;
37bdfb07 3068
1da177e4
LT
3069 if (!tty)
3070 return;
24ec839c 3071 session = tty->session;
37bdfb07 3072
b3f13deb 3073 tty_ldisc_flush(tty);
1da177e4 3074
f34d7a5b 3075 tty_driver_flush_buffer(tty);
37bdfb07 3076
1da177e4 3077 read_lock(&tasklist_lock);
652486fb 3078 /* Kill the entire session */
ab521dc0 3079 do_each_pid_task(session, PIDTYPE_SID, p) {
9b42bb75
PH
3080 tty_notice(tty, "SAK: killed process %d (%s): by session\n",
3081 task_pid_nr(p), p->comm);
652486fb 3082 send_sig(SIGKILL, p, 1);
ab521dc0 3083 } while_each_pid_task(session, PIDTYPE_SID, p);
9b42bb75
PH
3084
3085 /* Now kill any processes that happen to have the tty open */
652486fb
EB
3086 do_each_thread(g, p) {
3087 if (p->signal->tty == tty) {
9b42bb75
PH
3088 tty_notice(tty, "SAK: killed process %d (%s): by controlling tty\n",
3089 task_pid_nr(p), p->comm);
1da177e4
LT
3090 send_sig(SIGKILL, p, 1);
3091 continue;
3092 }
3093 task_lock(p);
c3c073f8
AV
3094 i = iterate_fd(p->files, 0, this_tty, tty);
3095 if (i != 0) {
9b42bb75
PH
3096 tty_notice(tty, "SAK: killed process %d (%s): by fd#%d\n",
3097 task_pid_nr(p), p->comm, i - 1);
c3c073f8 3098 force_sig(SIGKILL, p);
1da177e4
LT
3099 }
3100 task_unlock(p);
652486fb 3101 } while_each_thread(g, p);
1da177e4
LT
3102 read_unlock(&tasklist_lock);
3103#endif
3104}
3105
8b6312f4
EB
3106static void do_SAK_work(struct work_struct *work)
3107{
3108 struct tty_struct *tty =
3109 container_of(work, struct tty_struct, SAK_work);
3110 __do_SAK(tty);
3111}
3112
1da177e4
LT
3113/*
3114 * The tq handling here is a little racy - tty->SAK_work may already be queued.
3115 * Fortunately we don't need to worry, because if ->SAK_work is already queued,
3116 * the values which we write to it will be identical to the values which it
3117 * already has. --akpm
3118 */
3119void do_SAK(struct tty_struct *tty)
3120{
3121 if (!tty)
3122 return;
1da177e4
LT
3123 schedule_work(&tty->SAK_work);
3124}
3125
3126EXPORT_SYMBOL(do_SAK);
3127
6e9430ac 3128static int dev_match_devt(struct device *dev, const void *data)
30004ac9 3129{
6e9430ac 3130 const dev_t *devt = data;
30004ac9
DES
3131 return dev->devt == *devt;
3132}
3133
3134/* Must put_device() after it's unused! */
3135static struct device *tty_get_device(struct tty_struct *tty)
3136{
3137 dev_t devt = tty_devnum(tty);
3138 return class_find_device(tty_class, NULL, &devt, dev_match_devt);
3139}
3140
3141
af9b897e 3142/**
2c964a2f 3143 * alloc_tty_struct
af9b897e 3144 *
2c964a2f 3145 * This subroutine allocates and initializes a tty structure.
af9b897e 3146 *
2c964a2f 3147 * Locking: none - tty in question is not exposed at this point
1da177e4 3148 */
af9b897e 3149
2c964a2f 3150struct tty_struct *alloc_tty_struct(struct tty_driver *driver, int idx)
1da177e4 3151{
2c964a2f
RV
3152 struct tty_struct *tty;
3153
3154 tty = kzalloc(sizeof(*tty), GFP_KERNEL);
3155 if (!tty)
3156 return NULL;
3157
9c9f4ded 3158 kref_init(&tty->kref);
1da177e4 3159 tty->magic = TTY_MAGIC;
01e1abb2 3160 tty_ldisc_init(tty);
ab521dc0
EB
3161 tty->session = NULL;
3162 tty->pgrp = NULL;
89c8d91e 3163 mutex_init(&tty->legacy_mutex);
d8c1f929 3164 mutex_init(&tty->throttle_mutex);
6a1c0680 3165 init_rwsem(&tty->termios_rwsem);
dee4a0be 3166 mutex_init(&tty->winsize_mutex);
36697529 3167 init_ldsem(&tty->ldisc_sem);
1da177e4
LT
3168 init_waitqueue_head(&tty->write_wait);
3169 init_waitqueue_head(&tty->read_wait);
65f27f38 3170 INIT_WORK(&tty->hangup_work, do_tty_hangup);
70522e12 3171 mutex_init(&tty->atomic_write_lock);
04f378b1 3172 spin_lock_init(&tty->ctrl_lock);
f9e053dc 3173 spin_lock_init(&tty->flow_lock);
1da177e4 3174 INIT_LIST_HEAD(&tty->tty_files);
7f1f86a0 3175 INIT_WORK(&tty->SAK_work, do_SAK_work);
bf970ee4
AC
3176
3177 tty->driver = driver;
3178 tty->ops = driver->ops;
3179 tty->index = idx;
3180 tty_line_name(driver, idx, tty->name);
30004ac9 3181 tty->dev = tty_get_device(tty);
2c964a2f
RV
3182
3183 return tty;
1da177e4
LT
3184}
3185
f34d7a5b
AC
3186/**
3187 * tty_put_char - write one character to a tty
3188 * @tty: tty
3189 * @ch: character
3190 *
3191 * Write one byte to the tty using the provided put_char method
3192 * if present. Returns the number of characters successfully output.
3193 *
3194 * Note: the specific put_char operation in the driver layer may go
3195 * away soon. Don't call it directly, use this method
1da177e4 3196 */
af9b897e 3197
f34d7a5b 3198int tty_put_char(struct tty_struct *tty, unsigned char ch)
1da177e4 3199{
f34d7a5b
AC
3200 if (tty->ops->put_char)
3201 return tty->ops->put_char(tty, ch);
3202 return tty->ops->write(tty, &ch, 1);
1da177e4 3203}
f34d7a5b
AC
3204EXPORT_SYMBOL_GPL(tty_put_char);
3205
d81ed103 3206struct class *tty_class;
1da177e4 3207
7e73eca6
JS
3208static int tty_cdev_add(struct tty_driver *driver, dev_t dev,
3209 unsigned int index, unsigned int count)
3210{
c1a752ba
LY
3211 int err;
3212
7e73eca6 3213 /* init here, since reused cdevs cause crashes */
a3a10ce3
RW
3214 driver->cdevs[index] = cdev_alloc();
3215 if (!driver->cdevs[index])
3216 return -ENOMEM;
c1a752ba 3217 driver->cdevs[index]->ops = &tty_fops;
a3a10ce3 3218 driver->cdevs[index]->owner = driver->owner;
c1a752ba
LY
3219 err = cdev_add(driver->cdevs[index], dev, count);
3220 if (err)
3221 kobject_put(&driver->cdevs[index]->kobj);
3222 return err;
7e73eca6
JS
3223}
3224
1da177e4 3225/**
af9b897e
AC
3226 * tty_register_device - register a tty device
3227 * @driver: the tty driver that describes the tty device
3228 * @index: the index in the tty driver for this tty device
3229 * @device: a struct device that is associated with this tty device.
3230 * This field is optional, if there is no known struct device
3231 * for this tty device it can be set to NULL safely.
1da177e4 3232 *
01107d34
GKH
3233 * Returns a pointer to the struct device for this tty device
3234 * (or ERR_PTR(-EFOO) on error).
1cdcb6b4 3235 *
af9b897e
AC
3236 * This call is required to be made to register an individual tty device
3237 * if the tty driver's flags have the TTY_DRIVER_DYNAMIC_DEV bit set. If
3238 * that bit is not set, this function should not be called by a tty
3239 * driver.
3240 *
3241 * Locking: ??
1da177e4 3242 */
af9b897e 3243
01107d34
GKH
3244struct device *tty_register_device(struct tty_driver *driver, unsigned index,
3245 struct device *device)
1da177e4 3246{
6915c0e4
TH
3247 return tty_register_device_attr(driver, index, device, NULL, NULL);
3248}
3249EXPORT_SYMBOL(tty_register_device);
3250
b1b79916
TH
3251static void tty_device_create_release(struct device *dev)
3252{
83db1df4 3253 dev_dbg(dev, "releasing...\n");
b1b79916
TH
3254 kfree(dev);
3255}
3256
6915c0e4
TH
3257/**
3258 * tty_register_device_attr - register a tty device
3259 * @driver: the tty driver that describes the tty device
3260 * @index: the index in the tty driver for this tty device
3261 * @device: a struct device that is associated with this tty device.
3262 * This field is optional, if there is no known struct device
3263 * for this tty device it can be set to NULL safely.
3264 * @drvdata: Driver data to be set to device.
3265 * @attr_grp: Attribute group to be set on device.
3266 *
3267 * Returns a pointer to the struct device for this tty device
3268 * (or ERR_PTR(-EFOO) on error).
3269 *
3270 * This call is required to be made to register an individual tty device
3271 * if the tty driver's flags have the TTY_DRIVER_DYNAMIC_DEV bit set. If
3272 * that bit is not set, this function should not be called by a tty
3273 * driver.
3274 *
3275 * Locking: ??
3276 */
3277struct device *tty_register_device_attr(struct tty_driver *driver,
3278 unsigned index, struct device *device,
3279 void *drvdata,
3280 const struct attribute_group **attr_grp)
3281{
1da177e4 3282 char name[64];
6915c0e4
TH
3283 dev_t devt = MKDEV(driver->major, driver->minor_start) + index;
3284 struct device *dev = NULL;
3285 int retval = -ENODEV;
7e73eca6 3286 bool cdev = false;
1da177e4
LT
3287
3288 if (index >= driver->num) {
656fb867
PH
3289 pr_err("%s: Attempt to register invalid tty line number (%d)\n",
3290 driver->name, index);
1cdcb6b4 3291 return ERR_PTR(-EINVAL);
1da177e4
LT
3292 }
3293
1da177e4
LT
3294 if (driver->type == TTY_DRIVER_TYPE_PTY)
3295 pty_line_name(driver, index, name);
3296 else
3297 tty_line_name(driver, index, name);
1cdcb6b4 3298
7e73eca6 3299 if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
6915c0e4
TH
3300 retval = tty_cdev_add(driver, devt, index, 1);
3301 if (retval)
3302 goto error;
7e73eca6
JS
3303 cdev = true;
3304 }
3305
6915c0e4
TH
3306 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
3307 if (!dev) {
3308 retval = -ENOMEM;
3309 goto error;
3310 }
7e73eca6 3311
6915c0e4
TH
3312 dev->devt = devt;
3313 dev->class = tty_class;
3314 dev->parent = device;
b1b79916 3315 dev->release = tty_device_create_release;
6915c0e4
TH
3316 dev_set_name(dev, "%s", name);
3317 dev->groups = attr_grp;
3318 dev_set_drvdata(dev, drvdata);
3319
3320 retval = device_register(dev);
3321 if (retval)
3322 goto error;
3323
3324 return dev;
3325
3326error:
3327 put_device(dev);
a3a10ce3
RW
3328 if (cdev) {
3329 cdev_del(driver->cdevs[index]);
3330 driver->cdevs[index] = NULL;
3331 }
6915c0e4 3332 return ERR_PTR(retval);
1da177e4 3333}
6915c0e4 3334EXPORT_SYMBOL_GPL(tty_register_device_attr);
1da177e4
LT
3335
3336/**
af9b897e
AC
3337 * tty_unregister_device - unregister a tty device
3338 * @driver: the tty driver that describes the tty device
3339 * @index: the index in the tty driver for this tty device
1da177e4 3340 *
af9b897e
AC
3341 * If a tty device is registered with a call to tty_register_device() then
3342 * this function must be called when the tty device is gone.
3343 *
3344 * Locking: ??
1da177e4 3345 */
af9b897e 3346
1da177e4
LT
3347void tty_unregister_device(struct tty_driver *driver, unsigned index)
3348{
37bdfb07
AC
3349 device_destroy(tty_class,
3350 MKDEV(driver->major, driver->minor_start) + index);
a3a10ce3
RW
3351 if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3352 cdev_del(driver->cdevs[index]);
3353 driver->cdevs[index] = NULL;
3354 }
1da177e4 3355}
1da177e4
LT
3356EXPORT_SYMBOL(tty_unregister_device);
3357
7f0bc6a6
JS
3358/**
3359 * __tty_alloc_driver -- allocate tty driver
3360 * @lines: count of lines this driver can handle at most
3361 * @owner: module which is repsonsible for this driver
3362 * @flags: some of TTY_DRIVER_* flags, will be set in driver->flags
3363 *
3364 * This should not be called directly, some of the provided macros should be
3365 * used instead. Use IS_ERR and friends on @retval.
3366 */
3367struct tty_driver *__tty_alloc_driver(unsigned int lines, struct module *owner,
3368 unsigned long flags)
1da177e4
LT
3369{
3370 struct tty_driver *driver;
7e73eca6 3371 unsigned int cdevs = 1;
16a02081 3372 int err;
1da177e4 3373
0019b408 3374 if (!lines || (flags & TTY_DRIVER_UNNUMBERED_NODE && lines > 1))
7f0bc6a6
JS
3375 return ERR_PTR(-EINVAL);
3376
506eb99a 3377 driver = kzalloc(sizeof(struct tty_driver), GFP_KERNEL);
7f0bc6a6
JS
3378 if (!driver)
3379 return ERR_PTR(-ENOMEM);
3380
3381 kref_init(&driver->kref);
3382 driver->magic = TTY_DRIVER_MAGIC;
3383 driver->num = lines;
3384 driver->owner = owner;
3385 driver->flags = flags;
16a02081
JS
3386
3387 if (!(flags & TTY_DRIVER_DEVPTS_MEM)) {
3388 driver->ttys = kcalloc(lines, sizeof(*driver->ttys),
3389 GFP_KERNEL);
3390 driver->termios = kcalloc(lines, sizeof(*driver->termios),
3391 GFP_KERNEL);
3392 if (!driver->ttys || !driver->termios) {
3393 err = -ENOMEM;
3394 goto err_free_all;
3395 }
3396 }
3397
3398 if (!(flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3399 driver->ports = kcalloc(lines, sizeof(*driver->ports),
3400 GFP_KERNEL);
3401 if (!driver->ports) {
3402 err = -ENOMEM;
3403 goto err_free_all;
3404 }
7e73eca6
JS
3405 cdevs = lines;
3406 }
3407
3408 driver->cdevs = kcalloc(cdevs, sizeof(*driver->cdevs), GFP_KERNEL);
3409 if (!driver->cdevs) {
3410 err = -ENOMEM;
3411 goto err_free_all;
16a02081 3412 }
7f0bc6a6 3413
1da177e4 3414 return driver;
16a02081
JS
3415err_free_all:
3416 kfree(driver->ports);
3417 kfree(driver->ttys);
3418 kfree(driver->termios);
a3a10ce3 3419 kfree(driver->cdevs);
16a02081
JS
3420 kfree(driver);
3421 return ERR_PTR(err);
1da177e4 3422}
7f0bc6a6 3423EXPORT_SYMBOL(__tty_alloc_driver);
1da177e4 3424
7d7b93c1 3425static void destruct_tty_driver(struct kref *kref)
1da177e4 3426{
7d7b93c1
AC
3427 struct tty_driver *driver = container_of(kref, struct tty_driver, kref);
3428 int i;
3429 struct ktermios *tp;
7d7b93c1
AC
3430
3431 if (driver->flags & TTY_DRIVER_INSTALLED) {
3432 /*
3433 * Free the termios and termios_locked structures because
3434 * we don't want to get memory leaks when modular tty
3435 * drivers are removed from the kernel.
3436 */
3437 for (i = 0; i < driver->num; i++) {
3438 tp = driver->termios[i];
3439 if (tp) {
3440 driver->termios[i] = NULL;
3441 kfree(tp);
3442 }
7d7b93c1
AC
3443 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV))
3444 tty_unregister_device(driver, i);
3445 }
7d7b93c1 3446 proc_tty_unregister_driver(driver);
7e73eca6 3447 if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)
a3a10ce3 3448 cdev_del(driver->cdevs[0]);
7d7b93c1 3449 }
7e73eca6 3450 kfree(driver->cdevs);
04831dc1 3451 kfree(driver->ports);
16a02081
JS
3452 kfree(driver->termios);
3453 kfree(driver->ttys);
1da177e4
LT
3454 kfree(driver);
3455}
3456
7d7b93c1
AC
3457void tty_driver_kref_put(struct tty_driver *driver)
3458{
3459 kref_put(&driver->kref, destruct_tty_driver);
3460}
3461EXPORT_SYMBOL(tty_driver_kref_put);
3462
b68e31d0
JD
3463void tty_set_operations(struct tty_driver *driver,
3464 const struct tty_operations *op)
1da177e4 3465{
f34d7a5b
AC
3466 driver->ops = op;
3467};
7d7b93c1 3468EXPORT_SYMBOL(tty_set_operations);
1da177e4 3469
7d7b93c1
AC
3470void put_tty_driver(struct tty_driver *d)
3471{
3472 tty_driver_kref_put(d);
3473}
1da177e4 3474EXPORT_SYMBOL(put_tty_driver);
1da177e4
LT
3475
3476/*
3477 * Called by a tty driver to register itself.
3478 */
3479int tty_register_driver(struct tty_driver *driver)
3480{
3481 int error;
37bdfb07 3482 int i;
1da177e4 3483 dev_t dev;
b670bde0 3484 struct device *d;
1da177e4 3485
1da177e4 3486 if (!driver->major) {
37bdfb07
AC
3487 error = alloc_chrdev_region(&dev, driver->minor_start,
3488 driver->num, driver->name);
1da177e4
LT
3489 if (!error) {
3490 driver->major = MAJOR(dev);
3491 driver->minor_start = MINOR(dev);
3492 }
3493 } else {
3494 dev = MKDEV(driver->major, driver->minor_start);
e5717c48 3495 error = register_chrdev_region(dev, driver->num, driver->name);
1da177e4 3496 }
9bb8a3d4 3497 if (error < 0)
16a02081 3498 goto err;
1da177e4 3499
7e73eca6
JS
3500 if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC) {
3501 error = tty_cdev_add(driver, dev, 0, driver->num);
3502 if (error)
3503 goto err_unreg_char;
3504 }
1da177e4 3505
ca509f69 3506 mutex_lock(&tty_mutex);
1da177e4 3507 list_add(&driver->tty_drivers, &tty_drivers);
ca509f69 3508 mutex_unlock(&tty_mutex);
37bdfb07
AC
3509
3510 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) {
b670bde0
VK
3511 for (i = 0; i < driver->num; i++) {
3512 d = tty_register_device(driver, i, NULL);
3513 if (IS_ERR(d)) {
3514 error = PTR_ERR(d);
16a02081 3515 goto err_unreg_devs;
b670bde0
VK
3516 }
3517 }
1da177e4
LT
3518 }
3519 proc_tty_register_driver(driver);
7d7b93c1 3520 driver->flags |= TTY_DRIVER_INSTALLED;
1da177e4 3521 return 0;
b670bde0 3522
16a02081 3523err_unreg_devs:
b670bde0
VK
3524 for (i--; i >= 0; i--)
3525 tty_unregister_device(driver, i);
3526
3527 mutex_lock(&tty_mutex);
3528 list_del(&driver->tty_drivers);
3529 mutex_unlock(&tty_mutex);
3530
9bb8a3d4 3531err_unreg_char:
b670bde0 3532 unregister_chrdev_region(dev, driver->num);
16a02081 3533err:
b670bde0 3534 return error;
1da177e4 3535}
1da177e4
LT
3536EXPORT_SYMBOL(tty_register_driver);
3537
3538/*
3539 * Called by a tty driver to unregister itself.
3540 */
3541int tty_unregister_driver(struct tty_driver *driver)
3542{
7d7b93c1
AC
3543#if 0
3544 /* FIXME */
1da177e4
LT
3545 if (driver->refcount)
3546 return -EBUSY;
7d7b93c1 3547#endif
1da177e4
LT
3548 unregister_chrdev_region(MKDEV(driver->major, driver->minor_start),
3549 driver->num);
ca509f69 3550 mutex_lock(&tty_mutex);
1da177e4 3551 list_del(&driver->tty_drivers);
ca509f69 3552 mutex_unlock(&tty_mutex);
1da177e4
LT
3553 return 0;
3554}
7d7b93c1 3555
1da177e4
LT
3556EXPORT_SYMBOL(tty_unregister_driver);
3557
24ec839c
PZ
3558dev_t tty_devnum(struct tty_struct *tty)
3559{
3560 return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index;
3561}
3562EXPORT_SYMBOL(tty_devnum);
1da177e4 3563
d81ed103
AC
3564void tty_default_fops(struct file_operations *fops)
3565{
3566 *fops = tty_fops;
3567}
3568
1da177e4
LT
3569/*
3570 * Initialize the console device. This is called *early*, so
3571 * we can't necessarily depend on lots of kernel help here.
3572 * Just do some early initializations, and do the complex setup
3573 * later.
3574 */
3575void __init console_init(void)
3576{
3577 initcall_t *call;
3578
3579 /* Setup the default TTY line discipline. */
01e1abb2 3580 tty_ldisc_begin();
1da177e4
LT
3581
3582 /*
37bdfb07 3583 * set up the console device so that later boot sequences can
1da177e4
LT
3584 * inform about problems etc..
3585 */
1da177e4
LT
3586 call = __con_initcall_start;
3587 while (call < __con_initcall_end) {
3588 (*call)();
3589 call++;
3590 }
3591}
3592
2c9ede55 3593static char *tty_devnode(struct device *dev, umode_t *mode)
e454cea2
KS
3594{
3595 if (!mode)
3596 return NULL;
3597 if (dev->devt == MKDEV(TTYAUX_MAJOR, 0) ||
3598 dev->devt == MKDEV(TTYAUX_MAJOR, 2))
3599 *mode = 0666;
3600 return NULL;
3601}
3602
1da177e4
LT
3603static int __init tty_class_init(void)
3604{
7fe845d1 3605 tty_class = class_create(THIS_MODULE, "tty");
1da177e4
LT
3606 if (IS_ERR(tty_class))
3607 return PTR_ERR(tty_class);
e454cea2 3608 tty_class->devnode = tty_devnode;
1da177e4
LT
3609 return 0;
3610}
3611
3612postcore_initcall(tty_class_init);
3613
3614/* 3/2004 jmc: why do these devices exist? */
1da177e4 3615static struct cdev tty_cdev, console_cdev;
1da177e4 3616
fbc92a34
KS
3617static ssize_t show_cons_active(struct device *dev,
3618 struct device_attribute *attr, char *buf)
3619{
3620 struct console *cs[16];
3621 int i = 0;
3622 struct console *c;
3623 ssize_t count = 0;
3624
ac751efa 3625 console_lock();
a2a6a822 3626 for_each_console(c) {
fbc92a34
KS
3627 if (!c->device)
3628 continue;
3629 if (!c->write)
3630 continue;
3631 if ((c->flags & CON_ENABLED) == 0)
3632 continue;
3633 cs[i++] = c;
3634 if (i >= ARRAY_SIZE(cs))
3635 break;
3636 }
723abd87
HR
3637 while (i--) {
3638 int index = cs[i]->index;
3639 struct tty_driver *drv = cs[i]->device(cs[i], &index);
3640
3641 /* don't resolve tty0 as some programs depend on it */
3642 if (drv && (cs[i]->index > 0 || drv->major != TTY_MAJOR))
3643 count += tty_line_name(drv, index, buf + count);
3644 else
3645 count += sprintf(buf + count, "%s%d",
3646 cs[i]->name, cs[i]->index);
3647
3648 count += sprintf(buf + count, "%c", i ? ' ':'\n');
3649 }
ac751efa 3650 console_unlock();
fbc92a34
KS
3651
3652 return count;
3653}
3654static DEVICE_ATTR(active, S_IRUGO, show_cons_active, NULL);
3655
1083a7be
TI
3656static struct attribute *cons_dev_attrs[] = {
3657 &dev_attr_active.attr,
3658 NULL
3659};
3660
3661ATTRIBUTE_GROUPS(cons_dev);
3662
fbc92a34
KS
3663static struct device *consdev;
3664
3665void console_sysfs_notify(void)
3666{
3667 if (consdev)
3668 sysfs_notify(&consdev->kobj, NULL, "active");
3669}
3670
1da177e4
LT
3671/*
3672 * Ok, now we can initialize the rest of the tty devices and can count
3673 * on memory allocations, interrupts etc..
3674 */
31d1d48e 3675int __init tty_init(void)
1da177e4
LT
3676{
3677 cdev_init(&tty_cdev, &tty_fops);
3678 if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||
3679 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)
3680 panic("Couldn't register /dev/tty driver\n");
fbc92a34 3681 device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), NULL, "tty");
1da177e4
LT
3682
3683 cdev_init(&console_cdev, &console_fops);
3684 if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) ||
3685 register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0)
3686 panic("Couldn't register /dev/console driver\n");
1083a7be
TI
3687 consdev = device_create_with_groups(tty_class, NULL,
3688 MKDEV(TTYAUX_MAJOR, 1), NULL,
3689 cons_dev_groups, "console");
fbc92a34
KS
3690 if (IS_ERR(consdev))
3691 consdev = NULL;
1da177e4 3692
1da177e4 3693#ifdef CONFIG_VT
d81ed103 3694 vty_init(&console_fops);
1da177e4
LT
3695#endif
3696 return 0;
3697}
31d1d48e 3698
This page took 1.324565 seconds and 5 git commands to generate.