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