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