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