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