tty: Fix tty_init_termios() declaration
[deliverable/linux.git] / drivers / tty / tty_io.c
1 /*
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
20 * makes for cleaner and more compact code. -TYT, 9/17/92
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
42 *
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 *
50 * Rewrote tty_init_dev and tty_release_dev to eliminate races.
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.
63 * alloc_tty_struct() always uses kmalloc()
64 * -- Andrew Morton <andrewm@uow.edu.eu> 17Mar01
65 */
66
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>
79 #include <linux/fdtable.h>
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>
91 #include <linux/device.h>
92 #include <linux/wait.h>
93 #include <linux/bitops.h>
94 #include <linux/delay.h>
95 #include <linux/seq_file.h>
96 #include <linux/serial.h>
97 #include <linux/ratelimit.h>
98
99 #include <linux/uaccess.h>
100
101 #include <linux/kbd_kern.h>
102 #include <linux/vt_kern.h>
103 #include <linux/selection.h>
104
105 #include <linux/kmod.h>
106 #include <linux/nsproxy.h>
107
108 #undef TTY_DEBUG_HANGUP
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
114
115 #define TTY_PARANOIA_CHECK 1
116 #define CHECK_TTY_COUNT 1
117
118 struct ktermios tty_std_termios = { /* for the benefit of tty drivers */
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,
124 .c_cc = INIT_C_CC,
125 .c_ispeed = 38400,
126 .c_ospeed = 38400
127 };
128
129 EXPORT_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 */
134
135 LIST_HEAD(tty_drivers); /* linked list of tty drivers */
136
137 /* Mutex to protect creating and releasing a tty. This is shared with
138 vt.c for deeply disgusting hack reasons */
139 DEFINE_MUTEX(tty_mutex);
140 EXPORT_SYMBOL(tty_mutex);
141
142 /* Spinlock to protect the tty->tty_files list */
143 DEFINE_SPINLOCK(tty_files_lock);
144
145 static ssize_t tty_read(struct file *, char __user *, size_t, loff_t *);
146 static ssize_t tty_write(struct file *, const char __user *, size_t, loff_t *);
147 ssize_t redirected_tty_write(struct file *, const char __user *,
148 size_t, loff_t *);
149 static unsigned int tty_poll(struct file *, poll_table *);
150 static int tty_open(struct inode *, struct file *);
151 long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
152 #ifdef CONFIG_COMPAT
153 static long tty_compat_ioctl(struct file *file, unsigned int cmd,
154 unsigned long arg);
155 #else
156 #define tty_compat_ioctl NULL
157 #endif
158 static int __tty_fasync(int fd, struct file *filp, int on);
159 static int tty_fasync(int fd, struct file *filp, int on);
160 static void release_tty(struct tty_struct *tty, int idx);
161
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
171 static void free_tty_struct(struct tty_struct *tty)
172 {
173 tty_ldisc_deinit(tty);
174 put_device(tty->dev);
175 kfree(tty->write_buf);
176 tty->magic = 0xDEADDEAD;
177 kfree(tty);
178 }
179
180 static inline struct tty_struct *file_tty(struct file *file)
181 {
182 return ((struct tty_file_private *)file->private_data)->tty;
183 }
184
185 int tty_alloc_file(struct file *file)
186 {
187 struct tty_file_private *priv;
188
189 priv = kmalloc(sizeof(*priv), GFP_KERNEL);
190 if (!priv)
191 return -ENOMEM;
192
193 file->private_data = priv;
194
195 return 0;
196 }
197
198 /* Associate a new file with the tty structure */
199 void tty_add_file(struct tty_struct *tty, struct file *file)
200 {
201 struct tty_file_private *priv = file->private_data;
202
203 priv->tty = tty;
204 priv->file = file;
205
206 spin_lock(&tty_files_lock);
207 list_add(&priv->list, &tty->tty_files);
208 spin_unlock(&tty_files_lock);
209 }
210
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 */
217 void 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);
223 }
224
225 /* Delete file from its tty */
226 static void tty_del_file(struct file *file)
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);
233 tty_free_file(file);
234 }
235
236
237 #define TTY_NUMBER(tty) ((tty)->index + (tty)->driver->name_base)
238
239 /**
240 * tty_name - return tty naming
241 * @tty: tty structure
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
249 const char *tty_name(const struct tty_struct *tty)
250 {
251 if (!tty) /* Hmm. NULL pointer. That's fun. */
252 return "NULL tty";
253 return tty->name;
254 }
255
256 EXPORT_SYMBOL(tty_name);
257
258 const char *tty_driver_name(const struct tty_struct *tty)
259 {
260 if (!tty || !tty->driver)
261 return "";
262 return tty->driver->name;
263 }
264
265 static int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
266 const char *routine)
267 {
268 #ifdef TTY_PARANOIA_CHECK
269 if (!tty) {
270 pr_warn("(%d:%d): %s: NULL tty\n",
271 imajor(inode), iminor(inode), routine);
272 return 1;
273 }
274 if (tty->magic != TTY_MAGIC) {
275 pr_warn("(%d:%d): %s: bad magic number\n",
276 imajor(inode), iminor(inode), routine);
277 return 1;
278 }
279 #endif
280 return 0;
281 }
282
283 /* Caller must hold tty_lock */
284 static 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;
289
290 spin_lock(&tty_files_lock);
291 list_for_each(p, &tty->tty_files) {
292 count++;
293 }
294 spin_unlock(&tty_files_lock);
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) {
300 tty_warn(tty, "%s: tty->count(%d) != #fd's(%d)\n",
301 routine, tty->count, count);
302 return count;
303 }
304 #endif
305 return 0;
306 }
307
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
317 */
318
319 static 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;
328 return tty_driver_kref_get(p);
329 }
330 return NULL;
331 }
332
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 */
344 struct tty_driver *tty_find_polling_driver(char *name, int *line)
345 {
346 struct tty_driver *p, *res = NULL;
347 int tty_line = 0;
348 int len;
349 char *str, *stp;
350
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
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) {
363 if (strncmp(name, p->name, len) != 0)
364 continue;
365 stp = str;
366 if (*stp == ',')
367 stp++;
368 if (*stp == '\0')
369 stp = NULL;
370
371 if (tty_line >= 0 && tty_line < p->num && p->ops &&
372 p->ops->poll_init && !p->ops->poll_init(p, tty_line, stp)) {
373 res = tty_driver_kref_get(p);
374 *line = tty_line;
375 break;
376 }
377 }
378 mutex_unlock(&tty_mutex);
379
380 return res;
381 }
382 EXPORT_SYMBOL_GPL(tty_find_polling_driver);
383 #endif
384
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 *
393 * Locking: ctrl_lock
394 */
395
396 int __tty_check_change(struct tty_struct *tty, int sig)
397 {
398 unsigned long flags;
399 struct pid *pgrp, *tty_pgrp;
400 int ret = 0;
401
402 if (current->signal->tty != tty)
403 return 0;
404
405 rcu_read_lock();
406 pgrp = task_pgrp(current);
407
408 spin_lock_irqsave(&tty->ctrl_lock, flags);
409 tty_pgrp = tty->pgrp;
410 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
411
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 }
423 }
424 rcu_read_unlock();
425
426 if (!tty_pgrp)
427 tty_warn(tty, "sig=%d, tty->pgrp == NULL!\n", sig);
428
429 return ret;
430 }
431
432 int tty_check_change(struct tty_struct *tty)
433 {
434 return __tty_check_change(tty, SIGTTOU);
435 }
436 EXPORT_SYMBOL(tty_check_change);
437
438 static ssize_t hung_up_tty_read(struct file *file, char __user *buf,
439 size_t count, loff_t *ppos)
440 {
441 return 0;
442 }
443
444 static ssize_t hung_up_tty_write(struct file *file, const char __user *buf,
445 size_t count, loff_t *ppos)
446 {
447 return -EIO;
448 }
449
450 /* No kernel lock held - none needed ;) */
451 static unsigned int hung_up_tty_poll(struct file *filp, poll_table *wait)
452 {
453 return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM;
454 }
455
456 static long hung_up_tty_ioctl(struct file *file, unsigned int cmd,
457 unsigned long arg)
458 {
459 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
460 }
461
462 static long hung_up_tty_compat_ioctl(struct file *file,
463 unsigned int cmd, unsigned long arg)
464 {
465 return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
466 }
467
468 static const struct file_operations tty_fops = {
469 .llseek = no_llseek,
470 .read = tty_read,
471 .write = tty_write,
472 .poll = tty_poll,
473 .unlocked_ioctl = tty_ioctl,
474 .compat_ioctl = tty_compat_ioctl,
475 .open = tty_open,
476 .release = tty_release,
477 .fasync = tty_fasync,
478 };
479
480 static const struct file_operations console_fops = {
481 .llseek = no_llseek,
482 .read = tty_read,
483 .write = redirected_tty_write,
484 .poll = tty_poll,
485 .unlocked_ioctl = tty_ioctl,
486 .compat_ioctl = tty_compat_ioctl,
487 .open = tty_open,
488 .release = tty_release,
489 .fasync = tty_fasync,
490 };
491
492 static const struct file_operations hung_up_tty_fops = {
493 .llseek = no_llseek,
494 .read = hung_up_tty_read,
495 .write = hung_up_tty_write,
496 .poll = hung_up_tty_poll,
497 .unlocked_ioctl = hung_up_tty_ioctl,
498 .compat_ioctl = hung_up_tty_compat_ioctl,
499 .release = tty_release,
500 };
501
502 static DEFINE_SPINLOCK(redirect_lock);
503 static struct file *redirect;
504
505
506 void 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
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 *
523 * Caller must hold: tty_lock()
524 * a readlock on tasklist_lock
525 * sighand lock
526 */
527 static void __proc_set_tty(struct tty_struct *tty)
528 {
529 unsigned long flags;
530
531 spin_lock_irqsave(&tty->ctrl_lock, flags);
532 /*
533 * The session and fg pgrp references will be non-NULL if
534 * tiocsctty() is stealing the controlling tty
535 */
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) {
542 tty_debug(tty, "current tty %s not NULL!!\n",
543 current->signal->tty->name);
544 tty_kref_put(current->signal->tty);
545 }
546 put_pid(current->signal->tty_old_pgrp);
547 current->signal->tty = tty_kref_get(tty);
548 current->signal->tty_old_pgrp = NULL;
549 }
550
551 static void proc_set_tty(struct tty_struct *tty)
552 {
553 spin_lock_irq(&current->sighand->siglock);
554 __proc_set_tty(tty);
555 spin_unlock_irq(&current->sighand->siglock);
556 }
557
558 struct 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 }
568 EXPORT_SYMBOL_GPL(get_current_tty);
569
570 static 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
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 */
586
587 void tty_wakeup(struct tty_struct *tty)
588 {
589 struct tty_ldisc *ld;
590
591 if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) {
592 ld = tty_ldisc_ref(tty);
593 if (ld) {
594 if (ld->ops->write_wakeup)
595 ld->ops->write_wakeup(tty);
596 tty_ldisc_deref(ld);
597 }
598 }
599 wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
600 }
601
602 EXPORT_SYMBOL_GPL(tty_wakeup);
603
604 /**
605 * tty_signal_session_leader - sends SIGHUP to session leader
606 * @tty controlling tty
607 * @exit_session if non-zero, signal all foreground group processes
608 *
609 * Send SIGHUP and SIGCONT to the session leader and its process group.
610 * Optionally, signal all processes in the foreground process group.
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 */
616 static int tty_signal_session_leader(struct tty_struct *tty, int exit_session)
617 {
618 struct task_struct *p;
619 int refs = 0;
620 struct pid *tty_pgrp = NULL;
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 */
639 spin_lock(&tty->ctrl_lock);
640 tty_pgrp = get_pid(tty->pgrp);
641 if (tty->pgrp)
642 p->signal->tty_old_pgrp = get_pid(tty->pgrp);
643 spin_unlock(&tty->ctrl_lock);
644 spin_unlock_irq(&p->sighand->siglock);
645 } while_each_pid_task(tty->session, PIDTYPE_SID, p);
646 }
647 read_unlock(&tasklist_lock);
648
649 if (tty_pgrp) {
650 if (exit_session)
651 kill_pgrp(tty_pgrp, SIGHUP, exit_session);
652 put_pid(tty_pgrp);
653 }
654
655 return refs;
656 }
657
658 /**
659 * __tty_hangup - actual handler for hangup events
660 * @work: tty device
661 *
662 * This can be called by a "kworker" kernel thread. That is process
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:
672 * BTM
673 * redirect lock for undoing redirection
674 * file list lock for manipulating list of ttys
675 * tty_ldiscs_lock from called functions
676 * termios_rwsem resetting termios data
677 * tasklist_lock to walk task list for hangup event
678 * ->siglock to protect ->signal/->sighand
679 */
680 static void __tty_hangup(struct tty_struct *tty, int exit_session)
681 {
682 struct file *cons_filp = NULL;
683 struct file *filp, *f = NULL;
684 struct tty_file_private *priv;
685 int closecount = 0, n;
686 int refs;
687
688 if (!tty)
689 return;
690
691
692 spin_lock(&redirect_lock);
693 if (redirect && file_tty(redirect) == tty) {
694 f = redirect;
695 redirect = NULL;
696 }
697 spin_unlock(&redirect_lock);
698
699 tty_lock(tty);
700
701 if (test_bit(TTY_HUPPED, &tty->flags)) {
702 tty_unlock(tty);
703 return;
704 }
705
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 */
709 check_tty_count(tty, "tty_hangup");
710
711 spin_lock(&tty_files_lock);
712 /* This breaks for file handles being sent over AF_UNIX sockets ? */
713 list_for_each_entry(priv, &tty->tty_files, list) {
714 filp = priv->file;
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++;
720 __tty_fasync(-1, filp, 0); /* can't block */
721 filp->f_op = &hung_up_tty_fops;
722 }
723 spin_unlock(&tty_files_lock);
724
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
730 tty_ldisc_hangup(tty);
731
732 spin_lock_irq(&tty->ctrl_lock);
733 clear_bit(TTY_THROTTLED, &tty->flags);
734 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
735 put_pid(tty->session);
736 put_pid(tty->pgrp);
737 tty->session = NULL;
738 tty->pgrp = NULL;
739 tty->ctrl_status = 0;
740 spin_unlock_irq(&tty->ctrl_lock);
741
742 /*
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.
747 */
748 if (cons_filp) {
749 if (tty->ops->close)
750 for (n = 0; n < closecount; n++)
751 tty->ops->close(tty, cons_filp);
752 } else if (tty->ops->hangup)
753 tty->ops->hangup(tty);
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 */
760 set_bit(TTY_HUPPED, &tty->flags);
761 tty_unlock(tty);
762
763 if (f)
764 fput(f);
765 }
766
767 static void do_tty_hangup(struct work_struct *work)
768 {
769 struct tty_struct *tty =
770 container_of(work, struct tty_struct, hangup_work);
771
772 __tty_hangup(tty, 0);
773 }
774
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
783 void tty_hangup(struct tty_struct *tty)
784 {
785 tty_debug_hangup(tty, "hangup\n");
786 schedule_work(&tty->hangup_work);
787 }
788
789 EXPORT_SYMBOL(tty_hangup);
790
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
797 * is complete. That guarantee is necessary for security reasons.
798 */
799
800 void tty_vhangup(struct tty_struct *tty)
801 {
802 tty_debug_hangup(tty, "vhangup\n");
803 __tty_hangup(tty, 0);
804 }
805
806 EXPORT_SYMBOL(tty_vhangup);
807
808
809 /**
810 * tty_vhangup_self - process vhangup for own ctty
811 *
812 * Perform a vhangup on the current controlling tty
813 */
814
815 void tty_vhangup_self(void)
816 {
817 struct tty_struct *tty;
818
819 tty = get_current_tty();
820 if (tty) {
821 tty_vhangup(tty);
822 tty_kref_put(tty);
823 }
824 }
825
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
837 static void tty_vhangup_session(struct tty_struct *tty)
838 {
839 tty_debug_hangup(tty, "session hangup\n");
840 __tty_hangup(tty, 1);
841 }
842
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
851 int tty_hung_up_p(struct file *filp)
852 {
853 return (filp->f_op == &hung_up_tty_fops);
854 }
855
856 EXPORT_SYMBOL(tty_hung_up_p);
857
858 /**
859 * disassociate_ctty - disconnect controlling tty
860 * @on_exit: true if exiting so need to "hang up" the session
861 *
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:
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 *
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 *
874 * Locking:
875 * BTM is taken for hysterical raisins, and held when
876 * called from no_tty().
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
881 */
882
883 void disassociate_ctty(int on_exit)
884 {
885 struct tty_struct *tty;
886
887 if (!current->signal->leader)
888 return;
889
890 tty = get_current_tty();
891 if (tty) {
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);
898 if (!on_exit)
899 kill_pgrp(tty_pgrp, SIGCONT, on_exit);
900 put_pid(tty_pgrp);
901 }
902 }
903 tty_kref_put(tty);
904
905 } else if (on_exit) {
906 struct pid *old_pgrp;
907 spin_lock_irq(&current->sighand->siglock);
908 old_pgrp = current->signal->tty_old_pgrp;
909 current->signal->tty_old_pgrp = NULL;
910 spin_unlock_irq(&current->sighand->siglock);
911 if (old_pgrp) {
912 kill_pgrp(old_pgrp, SIGHUP, on_exit);
913 kill_pgrp(old_pgrp, SIGCONT, on_exit);
914 put_pid(old_pgrp);
915 }
916 return;
917 }
918
919 spin_lock_irq(&current->sighand->siglock);
920 put_pid(current->signal->tty_old_pgrp);
921 current->signal->tty_old_pgrp = NULL;
922
923 tty = tty_kref_get(current->signal->tty);
924 if (tty) {
925 unsigned long flags;
926 spin_lock_irqsave(&tty->ctrl_lock, flags);
927 put_pid(tty->session);
928 put_pid(tty->pgrp);
929 tty->session = NULL;
930 tty->pgrp = NULL;
931 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
932 tty_kref_put(tty);
933 } else
934 tty_debug_hangup(tty, "no current tty\n");
935
936 spin_unlock_irq(&current->sighand->siglock);
937 /* Now clear signal->tty under the lock */
938 read_lock(&tasklist_lock);
939 session_clear_tty(task_session(current));
940 read_unlock(&tasklist_lock);
941 }
942
943 /**
944 *
945 * no_tty - Ensure the current process does not have a controlling tty
946 */
947 void no_tty(void)
948 {
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 */
952 struct task_struct *tsk = current;
953 disassociate_ctty(0);
954 proc_clear_tty(tsk);
955 }
956
957
958 /**
959 * stop_tty - propagate flow control
960 * @tty: tty to stop
961 *
962 * Perform flow control to the driver. May be called
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:
972 * flow_lock
973 */
974
975 void __stop_tty(struct tty_struct *tty)
976 {
977 if (tty->stopped)
978 return;
979 tty->stopped = 1;
980 if (tty->ops->stop)
981 tty->ops->stop(tty);
982 }
983
984 void 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 }
992 EXPORT_SYMBOL(stop_tty);
993
994 /**
995 * start_tty - propagate flow control
996 * @tty: tty to start
997 *
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.
1001 *
1002 * Locking:
1003 * flow_lock
1004 */
1005
1006 void __start_tty(struct tty_struct *tty)
1007 {
1008 if (!tty->stopped || tty->flow_stopped)
1009 return;
1010 tty->stopped = 0;
1011 if (tty->ops->start)
1012 tty->ops->start(tty);
1013 tty_wakeup(tty);
1014 }
1015
1016 void 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 }
1024 EXPORT_SYMBOL(start_tty);
1025
1026 static void tty_update_time(struct timespec *time)
1027 {
1028 unsigned long sec = get_seconds();
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)
1037 time->tv_sec = sec;
1038 }
1039
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:
1051 * Locks the line discipline internally while needed. Multiple
1052 * read calls may be outstanding in parallel.
1053 */
1054
1055 static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
1056 loff_t *ppos)
1057 {
1058 int i;
1059 struct inode *inode = file_inode(file);
1060 struct tty_struct *tty = file_tty(file);
1061 struct tty_ldisc *ld;
1062
1063 if (tty_paranoia_check(tty, inode, "tty_read"))
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);
1071 if (ld->ops->read)
1072 i = ld->ops->read(tty, file, buf, count);
1073 else
1074 i = -EIO;
1075 tty_ldisc_deref(ld);
1076
1077 if (i > 0)
1078 tty_update_time(&inode->i_atime);
1079
1080 return i;
1081 }
1082
1083 static void tty_write_unlock(struct tty_struct *tty)
1084 {
1085 mutex_unlock(&tty->atomic_write_lock);
1086 wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
1087 }
1088
1089 static int tty_write_lock(struct tty_struct *tty, int ndelay)
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
1100 /*
1101 * Split writes up in sane blocksizes to avoid
1102 * denial-of-service type attacks
1103 */
1104 static 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 {
1111 ssize_t ret, written = 0;
1112 unsigned int chunk;
1113
1114 ret = tty_write_lock(tty, file->f_flags & O_NDELAY);
1115 if (ret < 0)
1116 return ret;
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.
1130 *
1131 * FIXME: This can probably go away now except that 64K chunks
1132 * are too likely to fail unless switched to vmalloc...
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
1140 /* write_buf/write_cnt is protected by the atomic_write_lock mutex */
1141 if (tty->write_cnt < chunk) {
1142 unsigned char *buf_chunk;
1143
1144 if (chunk < 1024)
1145 chunk = 1024;
1146
1147 buf_chunk = kmalloc(chunk, GFP_KERNEL);
1148 if (!buf_chunk) {
1149 ret = -ENOMEM;
1150 goto out;
1151 }
1152 kfree(tty->write_buf);
1153 tty->write_cnt = chunk;
1154 tty->write_buf = buf_chunk;
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;
1165 ret = write(tty, file, tty->write_buf, size);
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 }
1178 if (written) {
1179 tty_update_time(&file_inode(file)->i_mtime);
1180 ret = written;
1181 }
1182 out:
1183 tty_write_unlock(tty);
1184 return ret;
1185 }
1186
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 *
1196 * We must still hold the BTM and test the CLOSING flag for the moment.
1197 */
1198
1199 void tty_write_message(struct tty_struct *tty, char *msg)
1200 {
1201 if (tty) {
1202 mutex_lock(&tty->atomic_write_lock);
1203 tty_lock(tty);
1204 if (tty->ops->write && tty->count > 0)
1205 tty->ops->write(tty, msg, strlen(msg));
1206 tty_unlock(tty);
1207 tty_write_unlock(tty);
1208 }
1209 return;
1210 }
1211
1212
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
1226 * write method will not be invoked in parallel for each device.
1227 */
1228
1229 static ssize_t tty_write(struct file *file, const char __user *buf,
1230 size_t count, loff_t *ppos)
1231 {
1232 struct tty_struct *tty = file_tty(file);
1233 struct tty_ldisc *ld;
1234 ssize_t ret;
1235
1236 if (tty_paranoia_check(tty, file_inode(file), "tty_write"))
1237 return -EIO;
1238 if (!tty || !tty->ops->write ||
1239 (test_bit(TTY_IO_ERROR, &tty->flags)))
1240 return -EIO;
1241 /* Short term debug to catch buggy drivers */
1242 if (tty->ops->write_room == NULL)
1243 tty_err(tty, "missing write_room method\n");
1244 ld = tty_ldisc_ref_wait(tty);
1245 if (!ld->ops->write)
1246 ret = -EIO;
1247 else
1248 ret = do_tty_write(ld->ops->write, tty, file, buf, count);
1249 tty_ldisc_deref(ld);
1250 return ret;
1251 }
1252
1253 ssize_t redirected_tty_write(struct file *file, const char __user *buf,
1254 size_t count, loff_t *ppos)
1255 {
1256 struct file *p = NULL;
1257
1258 spin_lock(&redirect_lock);
1259 if (redirect)
1260 p = get_file(redirect);
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 }
1269 return tty_write(file, buf, count, ppos);
1270 }
1271
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
1280 int tty_send_xchar(struct tty_struct *tty, char ch)
1281 {
1282 int was_stopped = tty->stopped;
1283
1284 if (tty->ops->send_xchar) {
1285 down_read(&tty->termios_rwsem);
1286 tty->ops->send_xchar(tty, ch);
1287 up_read(&tty->termios_rwsem);
1288 return 0;
1289 }
1290
1291 if (tty_write_lock(tty, 0) < 0)
1292 return -ERESTARTSYS;
1293
1294 down_read(&tty->termios_rwsem);
1295 if (was_stopped)
1296 start_tty(tty);
1297 tty->ops->write(tty, &ch, 1);
1298 if (was_stopped)
1299 stop_tty(tty);
1300 up_read(&tty->termios_rwsem);
1301 tty_write_unlock(tty);
1302 return 0;
1303 }
1304
1305 static char ptychar[] = "pqrstuvwxyzabcde";
1306
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 */
1318 static void pty_line_name(struct tty_driver *driver, int index, char *p)
1319 {
1320 int i = index + driver->name_base;
1321 /* ->name is initialized to "ttyp", but "tty" is expected */
1322 sprintf(p, "%s%c%x",
1323 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name,
1324 ptychar[i >> 4 & 0xf], i & 0xf);
1325 }
1326
1327 /**
1328 * tty_line_name - generate name for a tty
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
1334 * buffer.
1335 *
1336 * Locking: None
1337 */
1338 static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p)
1339 {
1340 if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE)
1341 return sprintf(p, "%s", driver->name);
1342 else
1343 return sprintf(p, "%s%d", driver->name,
1344 index + driver->name_base);
1345 }
1346
1347 /**
1348 * tty_driver_lookup_tty() - find an existing tty, if any
1349 * @driver: the driver for the tty
1350 * @idx: the minor number
1351 *
1352 * Return the tty, if found. If not found, return NULL or ERR_PTR() if the
1353 * driver lookup() method returns an error.
1354 *
1355 * Locking: tty_mutex must be held. If the tty is found, bump the tty kref.
1356 */
1357 static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver,
1358 struct inode *inode, int idx)
1359 {
1360 struct tty_struct *tty;
1361
1362 if (driver->ops->lookup)
1363 tty = driver->ops->lookup(driver, inode, idx);
1364 else
1365 tty = driver->ttys[idx];
1366
1367 if (!IS_ERR(tty))
1368 tty_kref_get(tty);
1369 return tty;
1370 }
1371
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
1380 void tty_init_termios(struct tty_struct *tty)
1381 {
1382 struct ktermios *tp;
1383 int idx = tty->index;
1384
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;
1394 }
1395 /* Compatibility until drivers always set this */
1396 tty->termios.c_ispeed = tty_termios_input_baud_rate(&tty->termios);
1397 tty->termios.c_ospeed = tty_termios_baud_rate(&tty->termios);
1398 }
1399 EXPORT_SYMBOL_GPL(tty_init_termios);
1400
1401 int tty_standard_install(struct tty_driver *driver, struct tty_struct *tty)
1402 {
1403 tty_init_termios(tty);
1404 tty_driver_kref_get(driver);
1405 tty->count++;
1406 driver->ttys[tty->index] = tty;
1407 return 0;
1408 }
1409 EXPORT_SYMBOL_GPL(tty_standard_install);
1410
1411 /**
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
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.
1420 *
1421 * Locking: tty_mutex for now
1422 */
1423 static int tty_driver_install_tty(struct tty_driver *driver,
1424 struct tty_struct *tty)
1425 {
1426 return driver->ops->install ? driver->ops->install(driver, tty) :
1427 tty_standard_install(driver, tty);
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 */
1440 void tty_driver_remove_tty(struct tty_driver *driver, struct tty_struct *tty)
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
1451 *
1452 * Return 0 on success, -errno on error.
1453 * Re-opens on master ptys are not allowed and return -EIO.
1454 *
1455 * Locking: Caller must hold tty_lock
1456 */
1457 static int tty_reopen(struct tty_struct *tty)
1458 {
1459 struct tty_driver *driver = tty->driver;
1460
1461 if (driver->type == TTY_DRIVER_TYPE_PTY &&
1462 driver->subtype == PTY_TYPE_MASTER)
1463 return -EIO;
1464
1465 if (!tty->count)
1466 return -EAGAIN;
1467
1468 if (test_bit(TTY_EXCLUSIVE, &tty->flags) && !capable(CAP_SYS_ADMIN))
1469 return -EBUSY;
1470
1471 tty->count++;
1472
1473 WARN_ON(!tty->ldisc);
1474
1475 return 0;
1476 }
1477
1478 /**
1479 * tty_init_dev - initialise a tty device
1480 * @driver: tty driver we are opening a device on
1481 * @idx: device index
1482 * @ret_tty: returned tty structure
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 *
1496 * WSH 06/09/97: Rewritten to remove races and properly clean up after a
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
1499 * relaxed for the (most common) case of reopening a tty.
1500 */
1501
1502 struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx)
1503 {
1504 struct tty_struct *tty;
1505 int retval;
1506
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
1511 * and the allocated memory released. (Except that the termios
1512 * and locked termios may be retained.)
1513 */
1514
1515 if (!try_module_get(driver->owner))
1516 return ERR_PTR(-ENODEV);
1517
1518 tty = alloc_tty_struct(driver, idx);
1519 if (!tty) {
1520 retval = -ENOMEM;
1521 goto err_module_put;
1522 }
1523
1524 tty_lock(tty);
1525 retval = tty_driver_install_tty(driver, tty);
1526 if (retval < 0)
1527 goto err_free_tty;
1528
1529 if (!tty->port)
1530 tty->port = driver->ports[idx];
1531
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
1536 tty->port->itty = tty;
1537
1538 /*
1539 * Structures all installed ... call the ldisc open routines.
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.
1542 */
1543 retval = tty_ldisc_setup(tty, tty->link);
1544 if (retval)
1545 goto err_release_tty;
1546 /* Return the tty locked so that it cannot vanish under the caller */
1547 return tty;
1548
1549 err_free_tty:
1550 tty_unlock(tty);
1551 free_tty_struct(tty);
1552 err_module_put:
1553 module_put(driver->owner);
1554 return ERR_PTR(retval);
1555
1556 /* call the tty release_tty routine to clean out this slot */
1557 err_release_tty:
1558 tty_unlock(tty);
1559 tty_info_ratelimited(tty, "ldisc open failed (%d), clearing slot %d\n",
1560 retval, idx);
1561 release_tty(tty, idx);
1562 return ERR_PTR(retval);
1563 }
1564
1565 static void tty_free_termios(struct tty_struct *tty)
1566 {
1567 struct ktermios *tp;
1568 int idx = tty->index;
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);
1578 if (tp == NULL)
1579 return;
1580 tty->driver->termios[idx] = tp;
1581 }
1582 *tp = tty->termios;
1583 }
1584
1585 /**
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)
1588 *
1589 * Sync flush all works belonging to @tty (and the 'other' tty).
1590 */
1591 static void tty_flush_works(struct tty_struct *tty)
1592 {
1593 flush_work(&tty->SAK_work);
1594 flush_work(&tty->hangup_work);
1595 if (tty->link) {
1596 flush_work(&tty->link->SAK_work);
1597 flush_work(&tty->link->hangup_work);
1598 }
1599 }
1600
1601 /**
1602 * release_one_tty - release tty structure memory
1603 * @kref: kref of tty we are obliterating
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:
1610 * takes the file list lock internally when working on the list
1611 * of ttys that the driver keeps.
1612 *
1613 * This method gets called from a work queue so that the driver private
1614 * cleanup ops can sleep (needed for USB at least)
1615 */
1616 static void release_one_tty(struct work_struct *work)
1617 {
1618 struct tty_struct *tty =
1619 container_of(work, struct tty_struct, hangup_work);
1620 struct tty_driver *driver = tty->driver;
1621 struct module *owner = driver->owner;
1622
1623 if (tty->ops->cleanup)
1624 tty->ops->cleanup(tty);
1625
1626 tty->magic = 0;
1627 tty_driver_kref_put(driver);
1628 module_put(owner);
1629
1630 spin_lock(&tty_files_lock);
1631 list_del_init(&tty->tty_files);
1632 spin_unlock(&tty_files_lock);
1633
1634 put_pid(tty->pgrp);
1635 put_pid(tty->session);
1636 free_tty_struct(tty);
1637 }
1638
1639 static void queue_release_one_tty(struct kref *kref)
1640 {
1641 struct tty_struct *tty = container_of(kref, struct tty_struct, kref);
1642
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
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
1657 void tty_kref_put(struct tty_struct *tty)
1658 {
1659 if (tty)
1660 kref_put(&tty->kref, queue_release_one_tty);
1661 }
1662 EXPORT_SYMBOL(tty_kref_put);
1663
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:
1671 * tty_mutex
1672 * takes the file list lock internally when working on the list
1673 * of ttys that the driver keeps.
1674 *
1675 */
1676 static void release_tty(struct tty_struct *tty, int idx)
1677 {
1678 /* This should always be true but check for the moment */
1679 WARN_ON(tty->index != idx);
1680 WARN_ON(!mutex_is_locked(&tty_mutex));
1681 if (tty->ops->shutdown)
1682 tty->ops->shutdown(tty);
1683 tty_free_termios(tty);
1684 tty_driver_remove_tty(tty->driver, tty);
1685 tty->port->itty = NULL;
1686 if (tty->link)
1687 tty->link->port->itty = NULL;
1688 tty_buffer_cancel_work(tty->port);
1689
1690 tty_kref_put(tty->link);
1691 tty_kref_put(tty);
1692 }
1693
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 */
1703 static int tty_release_checks(struct tty_struct *tty, int idx)
1704 {
1705 #ifdef TTY_PARANOIA_CHECK
1706 if (idx < 0 || idx >= tty->driver->num) {
1707 tty_debug(tty, "bad idx %d\n", idx);
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]) {
1716 tty_debug(tty, "bad driver table[%d] = %p\n",
1717 idx, tty->driver->ttys[idx]);
1718 return -1;
1719 }
1720 if (tty->driver->other) {
1721 struct tty_struct *o_tty = tty->link;
1722
1723 if (o_tty != tty->driver->other->ttys[idx]) {
1724 tty_debug(tty, "bad other table[%d] = %p\n",
1725 idx, tty->driver->other->ttys[idx]);
1726 return -1;
1727 }
1728 if (o_tty->link != tty) {
1729 tty_debug(tty, "bad link = %p\n", o_tty->link);
1730 return -1;
1731 }
1732 }
1733 #endif
1734 return 0;
1735 }
1736
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 *
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 */
1755
1756 int tty_release(struct inode *inode, struct file *filp)
1757 {
1758 struct tty_struct *tty = file_tty(filp);
1759 struct tty_struct *o_tty = NULL;
1760 int do_sleep, final;
1761 int idx;
1762 long timeout = 0;
1763 int once = 1;
1764
1765 if (tty_paranoia_check(tty, inode, __func__))
1766 return 0;
1767
1768 tty_lock(tty);
1769 check_tty_count(tty, __func__);
1770
1771 __tty_fasync(-1, filp, 0);
1772
1773 idx = tty->index;
1774 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
1775 tty->driver->subtype == PTY_TYPE_MASTER)
1776 o_tty = tty->link;
1777
1778 if (tty_release_checks(tty, idx)) {
1779 tty_unlock(tty);
1780 return 0;
1781 }
1782
1783 tty_debug_hangup(tty, "releasing (count=%d)\n", tty->count);
1784
1785 if (tty->ops->close)
1786 tty->ops->close(tty, filp);
1787
1788 /* If tty is pty master, lock the slave pty (stable lock order) */
1789 tty_lock_slave(o_tty);
1790
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.
1801 * Thus this test wouldn't be triggered at the time the slave closed,
1802 * so we do it now.
1803 */
1804 while (1) {
1805 do_sleep = 0;
1806
1807 if (tty->count <= 1) {
1808 if (waitqueue_active(&tty->read_wait)) {
1809 wake_up_poll(&tty->read_wait, POLLIN);
1810 do_sleep++;
1811 }
1812 if (waitqueue_active(&tty->write_wait)) {
1813 wake_up_poll(&tty->write_wait, POLLOUT);
1814 do_sleep++;
1815 }
1816 }
1817 if (o_tty && o_tty->count <= 1) {
1818 if (waitqueue_active(&o_tty->read_wait)) {
1819 wake_up_poll(&o_tty->read_wait, POLLIN);
1820 do_sleep++;
1821 }
1822 if (waitqueue_active(&o_tty->write_wait)) {
1823 wake_up_poll(&o_tty->write_wait, POLLOUT);
1824 do_sleep++;
1825 }
1826 }
1827 if (!do_sleep)
1828 break;
1829
1830 if (once) {
1831 once = 0;
1832 tty_warn(tty, "read/write wait queue active!\n");
1833 }
1834 schedule_timeout_killable(timeout);
1835 if (timeout < 120 * HZ)
1836 timeout = 2 * timeout + 1;
1837 else
1838 timeout = MAX_SCHEDULE_TIMEOUT;
1839 }
1840
1841 if (o_tty) {
1842 if (--o_tty->count < 0) {
1843 tty_warn(tty, "bad slave count (%d)\n", o_tty->count);
1844 o_tty->count = 0;
1845 }
1846 }
1847 if (--tty->count < 0) {
1848 tty_warn(tty, "bad tty->count (%d)\n", tty->count);
1849 tty->count = 0;
1850 }
1851
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 */
1861 tty_del_file(filp);
1862
1863 /*
1864 * Perform some housekeeping before deciding whether to return.
1865 *
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 */
1870 if (!tty->count) {
1871 read_lock(&tasklist_lock);
1872 session_clear_tty(tty->session);
1873 if (o_tty)
1874 session_clear_tty(o_tty->session);
1875 read_unlock(&tasklist_lock);
1876 }
1877
1878 /* check whether both sides are closing ... */
1879 final = !tty->count && !(o_tty && o_tty->count);
1880
1881 tty_unlock_slave(o_tty);
1882 tty_unlock(tty);
1883
1884 /* At this point, the tty->count == 0 should ensure a dead tty
1885 cannot be re-opened by a racing opener */
1886
1887 if (!final)
1888 return 0;
1889
1890 tty_debug_hangup(tty, "final close\n");
1891 /*
1892 * Ask the line discipline code to release its structures
1893 */
1894 tty_ldisc_release(tty);
1895
1896 /* Wait for pending work before tty destruction commmences */
1897 tty_flush_works(tty);
1898
1899 tty_debug_hangup(tty, "freeing structure\n");
1900 /*
1901 * The release_tty function takes care of the details of clearing
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).
1905 */
1906 mutex_lock(&tty_mutex);
1907 release_tty(tty, idx);
1908 mutex_unlock(&tty_mutex);
1909
1910 return 0;
1911 }
1912
1913 /**
1914 * tty_open_current_tty - get locked tty of current task
1915 * @device: device number
1916 * @filp: file pointer to tty
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.
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 */
1924 static struct tty_struct *tty_open_current_tty(dev_t device, struct file *filp)
1925 {
1926 struct tty_struct *tty;
1927 int retval;
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; */
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 }
1946 return tty;
1947 }
1948
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 */
1962 static struct tty_driver *tty_lookup_driver(dev_t device, struct file *filp,
1963 int *noctty, int *index)
1964 {
1965 struct tty_driver *driver;
1966
1967 switch (device) {
1968 #ifdef CONFIG_VT
1969 case MKDEV(TTY_MAJOR, 0): {
1970 extern struct tty_driver *console_driver;
1971 driver = tty_driver_kref_get(console_driver);
1972 *index = fg_console;
1973 *noctty = 1;
1974 break;
1975 }
1976 #endif
1977 case MKDEV(TTYAUX_MAJOR, 1): {
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;
1985 break;
1986 }
1987 }
1988 return ERR_PTR(-ENODEV);
1989 }
1990 default:
1991 driver = get_tty_driver(device, index);
1992 if (!driver)
1993 return ERR_PTR(-ENODEV);
1994 break;
1995 }
1996 return driver;
1997 }
1998
1999 /**
2000 * tty_open - open a tty device
2001 * @inode: inode of device file
2002 * @filp: file pointer to tty
2003 *
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.
2007 *
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 *
2015 * Locking: tty_mutex protects tty, tty_lookup_driver and tty_init_dev.
2016 * tty->count should protect the rest.
2017 * ->siglock protects ->signal/->sighand
2018 *
2019 * Note: the tty_unlock/lock cases without a ref are only safe due to
2020 * tty_mutex
2021 */
2022
2023 static int tty_open(struct inode *inode, struct file *filp)
2024 {
2025 struct tty_struct *tty;
2026 int noctty, retval;
2027 struct tty_driver *driver = NULL;
2028 int index;
2029 dev_t device = inode->i_rdev;
2030 unsigned saved_flags = filp->f_flags;
2031
2032 nonseekable_open(inode, filp);
2033
2034 retry_open:
2035 retval = tty_alloc_file(filp);
2036 if (retval)
2037 return -ENOMEM;
2038
2039 noctty = filp->f_flags & O_NOCTTY;
2040 index = -1;
2041 retval = 0;
2042
2043 tty = tty_open_current_tty(device, filp);
2044 if (!tty) {
2045 mutex_lock(&tty_mutex);
2046 driver = tty_lookup_driver(device, filp, &noctty, &index);
2047 if (IS_ERR(driver)) {
2048 retval = PTR_ERR(driver);
2049 goto err_unlock;
2050 }
2051
2052 /* check whether we're reopening an existing tty */
2053 tty = tty_driver_lookup_tty(driver, inode, index);
2054 if (IS_ERR(tty)) {
2055 retval = PTR_ERR(tty);
2056 goto err_unlock;
2057 }
2058
2059 if (tty) {
2060 mutex_unlock(&tty_mutex);
2061 retval = tty_lock_interruptible(tty);
2062 if (retval) {
2063 if (retval == -EINTR)
2064 retval = -ERESTARTSYS;
2065 goto err_unref;
2066 }
2067 /* safe to drop the kref from tty_driver_lookup_tty() */
2068 tty_kref_put(tty);
2069 retval = tty_reopen(tty);
2070 if (retval < 0) {
2071 tty_unlock(tty);
2072 tty = ERR_PTR(retval);
2073 }
2074 } else { /* Returns with the tty_lock held for now */
2075 tty = tty_init_dev(driver, index);
2076 mutex_unlock(&tty_mutex);
2077 }
2078
2079 tty_driver_kref_put(driver);
2080 }
2081
2082 if (IS_ERR(tty)) {
2083 retval = PTR_ERR(tty);
2084 if (retval != -EAGAIN || signal_pending(current))
2085 goto err_file;
2086 tty_free_file(filp);
2087 schedule();
2088 goto retry_open;
2089 }
2090
2091 tty_add_file(tty, filp);
2092
2093 check_tty_count(tty, __func__);
2094 if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2095 tty->driver->subtype == PTY_TYPE_MASTER)
2096 noctty = 1;
2097
2098 tty_debug_hangup(tty, "opening (count=%d)\n", tty->count);
2099
2100 if (tty->ops->open)
2101 retval = tty->ops->open(tty, filp);
2102 else
2103 retval = -ENODEV;
2104 filp->f_flags = saved_flags;
2105
2106 if (retval) {
2107 tty_debug_hangup(tty, "open error %d, releasing\n", retval);
2108
2109 tty_unlock(tty); /* need to call tty_release without BTM */
2110 tty_release(inode, filp);
2111 if (retval != -ERESTARTSYS)
2112 return retval;
2113
2114 if (signal_pending(current))
2115 return retval;
2116
2117 schedule();
2118 /*
2119 * Need to reset f_op in case a hangup happened.
2120 */
2121 if (tty_hung_up_p(filp))
2122 filp->f_op = &tty_fops;
2123 goto retry_open;
2124 }
2125 clear_bit(TTY_HUPPED, &tty->flags);
2126
2127
2128 read_lock(&tasklist_lock);
2129 spin_lock_irq(&current->sighand->siglock);
2130 if (!noctty &&
2131 current->signal->leader &&
2132 !current->signal->tty &&
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 }
2151 spin_unlock_irq(&current->sighand->siglock);
2152 read_unlock(&tasklist_lock);
2153 tty_unlock(tty);
2154 return 0;
2155 err_unlock:
2156 mutex_unlock(&tty_mutex);
2157 err_unref:
2158 /* after locks to avoid deadlock */
2159 if (!IS_ERR_OR_NULL(driver))
2160 tty_driver_kref_put(driver);
2161 err_file:
2162 tty_free_file(filp);
2163 return retval;
2164 }
2165
2166
2167
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
2180 static unsigned int tty_poll(struct file *filp, poll_table *wait)
2181 {
2182 struct tty_struct *tty = file_tty(filp);
2183 struct tty_ldisc *ld;
2184 int ret = 0;
2185
2186 if (tty_paranoia_check(tty, file_inode(filp), "tty_poll"))
2187 return 0;
2188
2189 ld = tty_ldisc_ref_wait(tty);
2190 if (ld->ops->poll)
2191 ret = ld->ops->poll(tty, filp, wait);
2192 tty_ldisc_deref(ld);
2193 return ret;
2194 }
2195
2196 static int __tty_fasync(int fd, struct file *filp, int on)
2197 {
2198 struct tty_struct *tty = file_tty(filp);
2199 struct tty_ldisc *ldisc;
2200 unsigned long flags;
2201 int retval = 0;
2202
2203 if (tty_paranoia_check(tty, file_inode(filp), "tty_fasync"))
2204 goto out;
2205
2206 retval = fasync_helper(fd, filp, on, &tty->fasync);
2207 if (retval <= 0)
2208 goto out;
2209
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
2217 if (on) {
2218 enum pid_type type;
2219 struct pid *pid;
2220
2221 spin_lock_irqsave(&tty->ctrl_lock, flags);
2222 if (tty->pgrp) {
2223 pid = tty->pgrp;
2224 type = PIDTYPE_PGID;
2225 } else {
2226 pid = task_pid(current);
2227 type = PIDTYPE_PID;
2228 }
2229 get_pid(pid);
2230 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2231 __f_setown(filp, pid, type, 0);
2232 put_pid(pid);
2233 retval = 0;
2234 }
2235 out:
2236 return retval;
2237 }
2238
2239 static int tty_fasync(int fd, struct file *filp, int on)
2240 {
2241 struct tty_struct *tty = file_tty(filp);
2242 int retval;
2243
2244 tty_lock(tty);
2245 retval = __tty_fasync(fd, filp, on);
2246 tty_unlock(tty);
2247
2248 return retval;
2249 }
2250
2251 /**
2252 * tiocsti - fake input character
2253 * @tty: tty to fake input into
2254 * @p: pointer to character
2255 *
2256 * Fake input to a tty device. Does the necessary locking and
2257 * input management.
2258 *
2259 * FIXME: does not honour flow control ??
2260 *
2261 * Locking:
2262 * Called functions take tty_ldiscs_lock
2263 * current->signal->tty check is safe without locks
2264 *
2265 * FIXME: may race normal receive processing
2266 */
2267
2268 static int tiocsti(struct tty_struct *tty, char __user *p)
2269 {
2270 char ch, mbz = 0;
2271 struct tty_ldisc *ld;
2272
2273 if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN))
2274 return -EPERM;
2275 if (get_user(ch, p))
2276 return -EFAULT;
2277 tty_audit_tiocsti(tty, ch);
2278 ld = tty_ldisc_ref_wait(tty);
2279 ld->ops->receive_buf(tty, &ch, &mbz, 1);
2280 tty_ldisc_deref(ld);
2281 return 0;
2282 }
2283
2284 /**
2285 * tiocgwinsz - implement window query ioctl
2286 * @tty; tty
2287 * @arg: user buffer for result
2288 *
2289 * Copies the kernel idea of the window size into the user buffer.
2290 *
2291 * Locking: tty->winsize_mutex is taken to ensure the winsize data
2292 * is consistent.
2293 */
2294
2295 static int tiocgwinsz(struct tty_struct *tty, struct winsize __user *arg)
2296 {
2297 int err;
2298
2299 mutex_lock(&tty->winsize_mutex);
2300 err = copy_to_user(arg, &tty->winsize, sizeof(*arg));
2301 mutex_unlock(&tty->winsize_mutex);
2302
2303 return err ? -EFAULT: 0;
2304 }
2305
2306 /**
2307 * tty_do_resize - resize event
2308 * @tty: tty being resized
2309 * @rows: rows (character)
2310 * @cols: cols (character)
2311 *
2312 * Update the termios variables and send the necessary signals to
2313 * peform a terminal resize correctly
2314 */
2315
2316 int tty_do_resize(struct tty_struct *tty, struct winsize *ws)
2317 {
2318 struct pid *pgrp;
2319
2320 /* Lock the tty */
2321 mutex_lock(&tty->winsize_mutex);
2322 if (!memcmp(ws, &tty->winsize, sizeof(*ws)))
2323 goto done;
2324
2325 /* Signal the foreground process group */
2326 pgrp = tty_get_pgrp(tty);
2327 if (pgrp)
2328 kill_pgrp(pgrp, SIGWINCH, 1);
2329 put_pid(pgrp);
2330
2331 tty->winsize = *ws;
2332 done:
2333 mutex_unlock(&tty->winsize_mutex);
2334 return 0;
2335 }
2336 EXPORT_SYMBOL(tty_do_resize);
2337
2338 /**
2339 * tiocswinsz - implement window size set ioctl
2340 * @tty; tty side of tty
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:
2348 * Driver dependent. The default do_resize method takes the
2349 * tty termios mutex and ctrl_lock. The console takes its own lock
2350 * then calls into the default method.
2351 */
2352
2353 static int tiocswinsz(struct tty_struct *tty, struct winsize __user *arg)
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)
2360 return tty->ops->resize(tty, &tmp_ws);
2361 else
2362 return tty_do_resize(tty, &tmp_ws);
2363 }
2364
2365 /**
2366 * tioccons - allow admin to move logical console
2367 * @file: the file to become console
2368 *
2369 * Allow the administrator to move the redirected console device
2370 *
2371 * Locking: uses redirect_lock to guard the redirect information
2372 */
2373
2374 static 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 }
2393 redirect = get_file(file);
2394 spin_unlock(&redirect_lock);
2395 return 0;
2396 }
2397
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 *
2407 * Locking: none, the open file handle ensures it won't go away.
2408 */
2409
2410 static int fionbio(struct file *file, int __user *p)
2411 {
2412 int nonblock;
2413
2414 if (get_user(nonblock, p))
2415 return -EFAULT;
2416
2417 spin_lock(&file->f_lock);
2418 if (nonblock)
2419 file->f_flags |= O_NONBLOCK;
2420 else
2421 file->f_flags &= ~O_NONBLOCK;
2422 spin_unlock(&file->f_lock);
2423 return 0;
2424 }
2425
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:
2435 * Takes tty_lock() to serialize proc_set_tty() for this tty
2436 * Takes tasklist_lock internally to walk sessions
2437 * Takes ->siglock() when updating signal->tty
2438 */
2439
2440 static int tiocsctty(struct tty_struct *tty, struct file *file, int arg)
2441 {
2442 int ret = 0;
2443
2444 tty_lock(tty);
2445 read_lock(&tasklist_lock);
2446
2447 if (current->signal->leader && (task_session(current) == tty->session))
2448 goto unlock;
2449
2450 /*
2451 * The process must be a session leader and
2452 * not have a controlling tty already.
2453 */
2454 if (!current->signal->leader || current->signal->tty) {
2455 ret = -EPERM;
2456 goto unlock;
2457 }
2458
2459 if (tty->session) {
2460 /*
2461 * This tty is already the controlling
2462 * tty for another session group!
2463 */
2464 if (arg == 1 && capable(CAP_SYS_ADMIN)) {
2465 /*
2466 * Steal it away
2467 */
2468 session_clear_tty(tty->session);
2469 } else {
2470 ret = -EPERM;
2471 goto unlock;
2472 }
2473 }
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
2481 proc_set_tty(tty);
2482 unlock:
2483 read_unlock(&tasklist_lock);
2484 tty_unlock(tty);
2485 return ret;
2486 }
2487
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
2496 struct 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 }
2507 EXPORT_SYMBOL_GPL(tty_get_pgrp);
2508
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 */
2516 static 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
2530 /**
2531 * tiocgpgrp - get process group
2532 * @tty: tty passed by user
2533 * @real_tty: tty side of the tty passed by the user if a pty else the tty
2534 * @p: returned pid
2535 *
2536 * Obtain the process group of the tty. If there is no process group
2537 * return an error.
2538 *
2539 * Locking: none. Reference to current->signal->tty is safe.
2540 */
2541
2542 static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2543 {
2544 struct pid *pid;
2545 int ret;
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;
2552 pid = tty_get_pgrp(real_tty);
2553 ret = put_user(pid_vnr(pid), p);
2554 put_pid(pid);
2555 return ret;
2556 }
2557
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 *
2567 * Locking: RCU, ctrl lock
2568 */
2569
2570 static int tiocspgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t __user *p)
2571 {
2572 struct pid *pgrp;
2573 pid_t pgrp_nr;
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) ||
2582 (real_tty->session != task_session(current)))
2583 return -ENOTTY;
2584 if (get_user(pgrp_nr, p))
2585 return -EFAULT;
2586 if (pgrp_nr < 0)
2587 return -EINVAL;
2588 rcu_read_lock();
2589 pgrp = find_vpid(pgrp_nr);
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;
2597 spin_lock_irq(&tty->ctrl_lock);
2598 put_pid(real_tty->pgrp);
2599 real_tty->pgrp = get_pid(pgrp);
2600 spin_unlock_irq(&tty->ctrl_lock);
2601 out_unlock:
2602 rcu_read_unlock();
2603 return retval;
2604 }
2605
2606 /**
2607 * tiocgsid - get session id
2608 * @tty: tty passed by user
2609 * @real_tty: tty side of the tty passed by the user if a pty else the tty
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 *
2615 * Locking: none. Reference to current->signal->tty is safe.
2616 */
2617
2618 static 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;
2626 if (!real_tty->session)
2627 return -ENOTTY;
2628 return put_user(pid_vnr(real_tty->session), p);
2629 }
2630
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
2641 static int tiocsetd(struct tty_struct *tty, int __user *p)
2642 {
2643 int ldisc;
2644 int ret;
2645
2646 if (get_user(ldisc, p))
2647 return -EFAULT;
2648
2649 ret = tty_set_ldisc(tty, ldisc);
2650
2651 return ret;
2652 }
2653
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
2665 static 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
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:
2685 * atomic_write_lock serializes
2686 *
2687 */
2688
2689 static int send_break(struct tty_struct *tty, unsigned int duration)
2690 {
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);
2708 out:
2709 tty_write_unlock(tty);
2710 if (signal_pending(current))
2711 retval = -EINTR;
2712 }
2713 return retval;
2714 }
2715
2716 /**
2717 * tty_tiocmget - get modem status
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
2728 static int tty_tiocmget(struct tty_struct *tty, int __user *p)
2729 {
2730 int retval = -EINVAL;
2731
2732 if (tty->ops->tiocmget) {
2733 retval = tty->ops->tiocmget(tty);
2734
2735 if (retval >= 0)
2736 retval = put_user(retval, p);
2737 }
2738 return retval;
2739 }
2740
2741 /**
2742 * tty_tiocmset - set modem status
2743 * @tty: tty device
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
2753 static int tty_tiocmset(struct tty_struct *tty, unsigned int cmd,
2754 unsigned __user *p)
2755 {
2756 int retval;
2757 unsigned int set, clear, val;
2758
2759 if (tty->ops->tiocmset == NULL)
2760 return -EINVAL;
2761
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;
2780 return tty->ops->tiocmset(tty, set, clear);
2781 }
2782
2783 static 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
2797 static 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
2815 /*
2816 * if pty, return the slave side (real_tty)
2817 * otherwise, return self
2818 */
2819 static struct tty_struct *tty_pair_get_tty(struct tty_struct *tty)
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 }
2826
2827 /*
2828 * Split this up, as gcc can choke on it otherwise..
2829 */
2830 long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2831 {
2832 struct tty_struct *tty = file_tty(file);
2833 struct tty_struct *real_tty;
2834 void __user *p = (void __user *)arg;
2835 int retval;
2836 struct tty_ldisc *ld;
2837
2838 if (tty_paranoia_check(tty, file_inode(file), "tty_ioctl"))
2839 return -EINVAL;
2840
2841 real_tty = tty_pair_get_tty(tty);
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:
2851 case TCSBRKP:
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
2863 /*
2864 * Now do the stuff.
2865 */
2866 switch (cmd) {
2867 case TIOCSTI:
2868 return tiocsti(tty, p);
2869 case TIOCGWINSZ:
2870 return tiocgwinsz(real_tty, p);
2871 case TIOCSWINSZ:
2872 return tiocswinsz(real_tty, p);
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;
2883 case TIOCGEXCL:
2884 {
2885 int excl = test_bit(TTY_EXCLUSIVE, &tty->flags);
2886 return put_user(excl, (int __user *)p);
2887 }
2888 case TIOCNOTTY:
2889 if (current->signal->tty != tty)
2890 return -ENOTTY;
2891 no_tty();
2892 return 0;
2893 case TIOCSCTTY:
2894 return tiocsctty(real_tty, file, arg);
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:
2902 return tiocgetd(tty, p);
2903 case TIOCSETD:
2904 return tiocsetd(tty, p);
2905 case TIOCVHANGUP:
2906 if (!capable(CAP_SYS_ADMIN))
2907 return -EPERM;
2908 tty_vhangup(tty);
2909 return 0;
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 }
2915 /*
2916 * Break handling
2917 */
2918 case TIOCSBRK: /* Turn break on, unconditionally */
2919 if (tty->ops->break_ctl)
2920 return tty->ops->break_ctl(tty, -1);
2921 return 0;
2922 case TIOCCBRK: /* Turn break off, unconditionally */
2923 if (tty->ops->break_ctl)
2924 return tty->ops->break_ctl(tty, 0);
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:
2938 return tty_tiocmget(tty, p);
2939 case TIOCMSET:
2940 case TIOCMBIC:
2941 case TIOCMBIS:
2942 return tty_tiocmset(tty, cmd, p);
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;
2949 case TCFLSH:
2950 switch (arg) {
2951 case TCIFLUSH:
2952 case TCIOFLUSH:
2953 /* flush tty buffer and allow ldisc to process ioctl */
2954 tty_buffer_flush(tty, NULL);
2955 break;
2956 }
2957 break;
2958 case TIOCSSERIAL:
2959 tty_warn_deprecated_flags(p);
2960 break;
2961 }
2962 if (tty->ops->ioctl) {
2963 retval = tty->ops->ioctl(tty, cmd, arg);
2964 if (retval != -ENOIOCTLCMD)
2965 return retval;
2966 }
2967 ld = tty_ldisc_ref_wait(tty);
2968 retval = -EINVAL;
2969 if (ld->ops->ioctl) {
2970 retval = ld->ops->ioctl(tty, file, cmd, arg);
2971 if (retval == -ENOIOCTLCMD)
2972 retval = -ENOTTY;
2973 }
2974 tty_ldisc_deref(ld);
2975 return retval;
2976 }
2977
2978 #ifdef CONFIG_COMPAT
2979 static long tty_compat_ioctl(struct file *file, unsigned int cmd,
2980 unsigned long arg)
2981 {
2982 struct tty_struct *tty = file_tty(file);
2983 struct tty_ldisc *ld;
2984 int retval = -ENOIOCTLCMD;
2985
2986 if (tty_paranoia_check(tty, file_inode(file), "tty_ioctl"))
2987 return -EINVAL;
2988
2989 if (tty->ops->compat_ioctl) {
2990 retval = tty->ops->compat_ioctl(tty, cmd, arg);
2991 if (retval != -ENOIOCTLCMD)
2992 return retval;
2993 }
2994
2995 ld = tty_ldisc_ref_wait(tty);
2996 if (ld->ops->compat_ioctl)
2997 retval = ld->ops->compat_ioctl(tty, file, cmd, arg);
2998 else
2999 retval = n_tty_compat_ioctl_helper(tty, file, cmd, arg);
3000 tty_ldisc_deref(ld);
3001
3002 return retval;
3003 }
3004 #endif
3005
3006 static 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
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.
3018 *
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 */
3032 void __do_SAK(struct tty_struct *tty)
3033 {
3034 #ifdef TTY_SOFT_SAK
3035 tty_hangup(tty);
3036 #else
3037 struct task_struct *g, *p;
3038 struct pid *session;
3039 int i;
3040
3041 if (!tty)
3042 return;
3043 session = tty->session;
3044
3045 tty_ldisc_flush(tty);
3046
3047 tty_driver_flush_buffer(tty);
3048
3049 read_lock(&tasklist_lock);
3050 /* Kill the entire session */
3051 do_each_pid_task(session, PIDTYPE_SID, p) {
3052 tty_notice(tty, "SAK: killed process %d (%s): by session\n",
3053 task_pid_nr(p), p->comm);
3054 send_sig(SIGKILL, p, 1);
3055 } while_each_pid_task(session, PIDTYPE_SID, p);
3056
3057 /* Now kill any processes that happen to have the tty open */
3058 do_each_thread(g, p) {
3059 if (p->signal->tty == tty) {
3060 tty_notice(tty, "SAK: killed process %d (%s): by controlling tty\n",
3061 task_pid_nr(p), p->comm);
3062 send_sig(SIGKILL, p, 1);
3063 continue;
3064 }
3065 task_lock(p);
3066 i = iterate_fd(p->files, 0, this_tty, tty);
3067 if (i != 0) {
3068 tty_notice(tty, "SAK: killed process %d (%s): by fd#%d\n",
3069 task_pid_nr(p), p->comm, i - 1);
3070 force_sig(SIGKILL, p);
3071 }
3072 task_unlock(p);
3073 } while_each_thread(g, p);
3074 read_unlock(&tasklist_lock);
3075 #endif
3076 }
3077
3078 static 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
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 */
3091 void do_SAK(struct tty_struct *tty)
3092 {
3093 if (!tty)
3094 return;
3095 schedule_work(&tty->SAK_work);
3096 }
3097
3098 EXPORT_SYMBOL(do_SAK);
3099
3100 static int dev_match_devt(struct device *dev, const void *data)
3101 {
3102 const dev_t *devt = data;
3103 return dev->devt == *devt;
3104 }
3105
3106 /* Must put_device() after it's unused! */
3107 static 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
3114 /**
3115 * alloc_tty_struct
3116 *
3117 * This subroutine allocates and initializes a tty structure.
3118 *
3119 * Locking: none - tty in question is not exposed at this point
3120 */
3121
3122 struct tty_struct *alloc_tty_struct(struct tty_driver *driver, int idx)
3123 {
3124 struct tty_struct *tty;
3125
3126 tty = kzalloc(sizeof(*tty), GFP_KERNEL);
3127 if (!tty)
3128 return NULL;
3129
3130 kref_init(&tty->kref);
3131 tty->magic = TTY_MAGIC;
3132 tty_ldisc_init(tty);
3133 tty->session = NULL;
3134 tty->pgrp = NULL;
3135 mutex_init(&tty->legacy_mutex);
3136 mutex_init(&tty->throttle_mutex);
3137 init_rwsem(&tty->termios_rwsem);
3138 mutex_init(&tty->winsize_mutex);
3139 init_ldsem(&tty->ldisc_sem);
3140 init_waitqueue_head(&tty->write_wait);
3141 init_waitqueue_head(&tty->read_wait);
3142 INIT_WORK(&tty->hangup_work, do_tty_hangup);
3143 mutex_init(&tty->atomic_write_lock);
3144 spin_lock_init(&tty->ctrl_lock);
3145 spin_lock_init(&tty->flow_lock);
3146 INIT_LIST_HEAD(&tty->tty_files);
3147 INIT_WORK(&tty->SAK_work, do_SAK_work);
3148
3149 tty->driver = driver;
3150 tty->ops = driver->ops;
3151 tty->index = idx;
3152 tty_line_name(driver, idx, tty->name);
3153 tty->dev = tty_get_device(tty);
3154
3155 return tty;
3156 }
3157
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
3168 */
3169
3170 int tty_put_char(struct tty_struct *tty, unsigned char ch)
3171 {
3172 if (tty->ops->put_char)
3173 return tty->ops->put_char(tty, ch);
3174 return tty->ops->write(tty, &ch, 1);
3175 }
3176 EXPORT_SYMBOL_GPL(tty_put_char);
3177
3178 struct class *tty_class;
3179
3180 static int tty_cdev_add(struct tty_driver *driver, dev_t dev,
3181 unsigned int index, unsigned int count)
3182 {
3183 int err;
3184
3185 /* init here, since reused cdevs cause crashes */
3186 driver->cdevs[index] = cdev_alloc();
3187 if (!driver->cdevs[index])
3188 return -ENOMEM;
3189 driver->cdevs[index]->ops = &tty_fops;
3190 driver->cdevs[index]->owner = driver->owner;
3191 err = cdev_add(driver->cdevs[index], dev, count);
3192 if (err)
3193 kobject_put(&driver->cdevs[index]->kobj);
3194 return err;
3195 }
3196
3197 /**
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.
3204 *
3205 * Returns a pointer to the struct device for this tty device
3206 * (or ERR_PTR(-EFOO) on error).
3207 *
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: ??
3214 */
3215
3216 struct device *tty_register_device(struct tty_driver *driver, unsigned index,
3217 struct device *device)
3218 {
3219 return tty_register_device_attr(driver, index, device, NULL, NULL);
3220 }
3221 EXPORT_SYMBOL(tty_register_device);
3222
3223 static void tty_device_create_release(struct device *dev)
3224 {
3225 dev_dbg(dev, "releasing...\n");
3226 kfree(dev);
3227 }
3228
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 */
3249 struct 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 {
3254 char name[64];
3255 dev_t devt = MKDEV(driver->major, driver->minor_start) + index;
3256 struct device *dev = NULL;
3257 int retval = -ENODEV;
3258 bool cdev = false;
3259
3260 if (index >= driver->num) {
3261 pr_err("%s: Attempt to register invalid tty line number (%d)\n",
3262 driver->name, index);
3263 return ERR_PTR(-EINVAL);
3264 }
3265
3266 if (driver->type == TTY_DRIVER_TYPE_PTY)
3267 pty_line_name(driver, index, name);
3268 else
3269 tty_line_name(driver, index, name);
3270
3271 if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3272 retval = tty_cdev_add(driver, devt, index, 1);
3273 if (retval)
3274 goto error;
3275 cdev = true;
3276 }
3277
3278 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
3279 if (!dev) {
3280 retval = -ENOMEM;
3281 goto error;
3282 }
3283
3284 dev->devt = devt;
3285 dev->class = tty_class;
3286 dev->parent = device;
3287 dev->release = tty_device_create_release;
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
3298 error:
3299 put_device(dev);
3300 if (cdev) {
3301 cdev_del(driver->cdevs[index]);
3302 driver->cdevs[index] = NULL;
3303 }
3304 return ERR_PTR(retval);
3305 }
3306 EXPORT_SYMBOL_GPL(tty_register_device_attr);
3307
3308 /**
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
3312 *
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: ??
3317 */
3318
3319 void tty_unregister_device(struct tty_driver *driver, unsigned index)
3320 {
3321 device_destroy(tty_class,
3322 MKDEV(driver->major, driver->minor_start) + index);
3323 if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3324 cdev_del(driver->cdevs[index]);
3325 driver->cdevs[index] = NULL;
3326 }
3327 }
3328 EXPORT_SYMBOL(tty_unregister_device);
3329
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 */
3339 struct tty_driver *__tty_alloc_driver(unsigned int lines, struct module *owner,
3340 unsigned long flags)
3341 {
3342 struct tty_driver *driver;
3343 unsigned int cdevs = 1;
3344 int err;
3345
3346 if (!lines || (flags & TTY_DRIVER_UNNUMBERED_NODE && lines > 1))
3347 return ERR_PTR(-EINVAL);
3348
3349 driver = kzalloc(sizeof(struct tty_driver), GFP_KERNEL);
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;
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 }
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;
3384 }
3385
3386 return driver;
3387 err_free_all:
3388 kfree(driver->ports);
3389 kfree(driver->ttys);
3390 kfree(driver->termios);
3391 kfree(driver->cdevs);
3392 kfree(driver);
3393 return ERR_PTR(err);
3394 }
3395 EXPORT_SYMBOL(__tty_alloc_driver);
3396
3397 static void destruct_tty_driver(struct kref *kref)
3398 {
3399 struct tty_driver *driver = container_of(kref, struct tty_driver, kref);
3400 int i;
3401 struct ktermios *tp;
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 }
3415 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV))
3416 tty_unregister_device(driver, i);
3417 }
3418 proc_tty_unregister_driver(driver);
3419 if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)
3420 cdev_del(driver->cdevs[0]);
3421 }
3422 kfree(driver->cdevs);
3423 kfree(driver->ports);
3424 kfree(driver->termios);
3425 kfree(driver->ttys);
3426 kfree(driver);
3427 }
3428
3429 void tty_driver_kref_put(struct tty_driver *driver)
3430 {
3431 kref_put(&driver->kref, destruct_tty_driver);
3432 }
3433 EXPORT_SYMBOL(tty_driver_kref_put);
3434
3435 void tty_set_operations(struct tty_driver *driver,
3436 const struct tty_operations *op)
3437 {
3438 driver->ops = op;
3439 };
3440 EXPORT_SYMBOL(tty_set_operations);
3441
3442 void put_tty_driver(struct tty_driver *d)
3443 {
3444 tty_driver_kref_put(d);
3445 }
3446 EXPORT_SYMBOL(put_tty_driver);
3447
3448 /*
3449 * Called by a tty driver to register itself.
3450 */
3451 int tty_register_driver(struct tty_driver *driver)
3452 {
3453 int error;
3454 int i;
3455 dev_t dev;
3456 struct device *d;
3457
3458 if (!driver->major) {
3459 error = alloc_chrdev_region(&dev, driver->minor_start,
3460 driver->num, driver->name);
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);
3467 error = register_chrdev_region(dev, driver->num, driver->name);
3468 }
3469 if (error < 0)
3470 goto err;
3471
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 }
3477
3478 mutex_lock(&tty_mutex);
3479 list_add(&driver->tty_drivers, &tty_drivers);
3480 mutex_unlock(&tty_mutex);
3481
3482 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) {
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);
3487 goto err_unreg_devs;
3488 }
3489 }
3490 }
3491 proc_tty_register_driver(driver);
3492 driver->flags |= TTY_DRIVER_INSTALLED;
3493 return 0;
3494
3495 err_unreg_devs:
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
3503 err_unreg_char:
3504 unregister_chrdev_region(dev, driver->num);
3505 err:
3506 return error;
3507 }
3508 EXPORT_SYMBOL(tty_register_driver);
3509
3510 /*
3511 * Called by a tty driver to unregister itself.
3512 */
3513 int tty_unregister_driver(struct tty_driver *driver)
3514 {
3515 #if 0
3516 /* FIXME */
3517 if (driver->refcount)
3518 return -EBUSY;
3519 #endif
3520 unregister_chrdev_region(MKDEV(driver->major, driver->minor_start),
3521 driver->num);
3522 mutex_lock(&tty_mutex);
3523 list_del(&driver->tty_drivers);
3524 mutex_unlock(&tty_mutex);
3525 return 0;
3526 }
3527
3528 EXPORT_SYMBOL(tty_unregister_driver);
3529
3530 dev_t tty_devnum(struct tty_struct *tty)
3531 {
3532 return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index;
3533 }
3534 EXPORT_SYMBOL(tty_devnum);
3535
3536 void tty_default_fops(struct file_operations *fops)
3537 {
3538 *fops = tty_fops;
3539 }
3540
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 */
3547 void __init console_init(void)
3548 {
3549 initcall_t *call;
3550
3551 /* Setup the default TTY line discipline. */
3552 tty_ldisc_begin();
3553
3554 /*
3555 * set up the console device so that later boot sequences can
3556 * inform about problems etc..
3557 */
3558 call = __con_initcall_start;
3559 while (call < __con_initcall_end) {
3560 (*call)();
3561 call++;
3562 }
3563 }
3564
3565 static char *tty_devnode(struct device *dev, umode_t *mode)
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
3575 static int __init tty_class_init(void)
3576 {
3577 tty_class = class_create(THIS_MODULE, "tty");
3578 if (IS_ERR(tty_class))
3579 return PTR_ERR(tty_class);
3580 tty_class->devnode = tty_devnode;
3581 return 0;
3582 }
3583
3584 postcore_initcall(tty_class_init);
3585
3586 /* 3/2004 jmc: why do these devices exist? */
3587 static struct cdev tty_cdev, console_cdev;
3588
3589 static 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
3597 console_lock();
3598 for_each_console(c) {
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 }
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 }
3622 console_unlock();
3623
3624 return count;
3625 }
3626 static DEVICE_ATTR(active, S_IRUGO, show_cons_active, NULL);
3627
3628 static struct attribute *cons_dev_attrs[] = {
3629 &dev_attr_active.attr,
3630 NULL
3631 };
3632
3633 ATTRIBUTE_GROUPS(cons_dev);
3634
3635 static struct device *consdev;
3636
3637 void console_sysfs_notify(void)
3638 {
3639 if (consdev)
3640 sysfs_notify(&consdev->kobj, NULL, "active");
3641 }
3642
3643 /*
3644 * Ok, now we can initialize the rest of the tty devices and can count
3645 * on memory allocations, interrupts etc..
3646 */
3647 int __init tty_init(void)
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");
3653 device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), NULL, "tty");
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");
3659 consdev = device_create_with_groups(tty_class, NULL,
3660 MKDEV(TTYAUX_MAJOR, 1), NULL,
3661 cons_dev_groups, "console");
3662 if (IS_ERR(consdev))
3663 consdev = NULL;
3664
3665 #ifdef CONFIG_VT
3666 vty_init(&console_fops);
3667 #endif
3668 return 0;
3669 }
3670
This page took 0.101141 seconds and 6 git commands to generate.