GNU Linux-libre 4.14.330-gnu1
[releases.git] / drivers / tty / tty_io.c
1 /*
2  *  Copyright (C) 1991, 1992  Linus Torvalds
3  */
4
5 /*
6  * 'tty_io.c' gives an orthogonal feeling to tty's, be they consoles
7  * or rs-channels. It also implements echoing, cooked mode etc.
8  *
9  * Kill-line thanks to John T Kohl, who also corrected VMIN = VTIME = 0.
10  *
11  * Modified by Theodore Ts'o, 9/14/92, to dynamically allocate the
12  * tty_struct and tty_queue structures.  Previously there was an array
13  * of 256 tty_struct's which was statically allocated, and the
14  * tty_queue structures were allocated at boot time.  Both are now
15  * dynamically allocated only when the tty is open.
16  *
17  * Also restructured routines so that there is more of a separation
18  * between the high-level tty routines (tty_io.c and tty_ioctl.c) and
19  * the low-level tty routines (serial.c, pty.c, console.c).  This
20  * makes for cleaner and more compact code.  -TYT, 9/17/92
21  *
22  * Modified by Fred N. van Kempen, 01/29/93, to add line disciplines
23  * which can be dynamically activated and de-activated by the line
24  * discipline handling modules (like SLIP).
25  *
26  * NOTE: pay no attention to the line discipline code (yet); its
27  * interface is still subject to change in this version...
28  * -- TYT, 1/31/92
29  *
30  * Added functionality to the OPOST tty handling.  No delays, but all
31  * other bits should be there.
32  *      -- Nick Holloway <alfie@dcs.warwick.ac.uk>, 27th May 1993.
33  *
34  * Rewrote canonical mode and added more termios flags.
35  *      -- julian@uhunix.uhcc.hawaii.edu (J. Cowley), 13Jan94
36  *
37  * Reorganized FASYNC support so mouse code can share it.
38  *      -- ctm@ardi.com, 9Sep95
39  *
40  * New TIOCLINUX variants added.
41  *      -- mj@k332.feld.cvut.cz, 19-Nov-95
42  *
43  * Restrict vt switching via ioctl()
44  *      -- grif@cs.ucr.edu, 5-Dec-95
45  *
46  * Move console and virtual terminal code to more appropriate files,
47  * implement CONFIG_VT and generalize console device interface.
48  *      -- Marko Kohtala <Marko.Kohtala@hut.fi>, March 97
49  *
50  * Rewrote tty_init_dev and tty_release_dev to eliminate races.
51  *      -- Bill Hawes <whawes@star.net>, June 97
52  *
53  * Added devfs support.
54  *      -- C. Scott Ananian <cananian@alumni.princeton.edu>, 13-Jan-1998
55  *
56  * Added support for a Unix98-style ptmx device.
57  *      -- C. Scott Ananian <cananian@alumni.princeton.edu>, 14-Jan-1998
58  *
59  * Reduced memory usage for older ARM systems
60  *      -- Russell King <rmk@arm.linux.org.uk>
61  *
62  * Move do_SAK() into process context.  Less stack use in devfs functions.
63  * alloc_tty_struct() always uses kmalloc()
64  *                       -- Andrew Morton <andrewm@uow.edu.eu> 17Mar01
65  */
66
67 #include <linux/types.h>
68 #include <linux/major.h>
69 #include <linux/errno.h>
70 #include <linux/signal.h>
71 #include <linux/fcntl.h>
72 #include <linux/sched/signal.h>
73 #include <linux/sched/task.h>
74 #include <linux/interrupt.h>
75 #include <linux/tty.h>
76 #include <linux/tty_driver.h>
77 #include <linux/tty_flip.h>
78 #include <linux/devpts_fs.h>
79 #include <linux/file.h>
80 #include <linux/fdtable.h>
81 #include <linux/console.h>
82 #include <linux/timer.h>
83 #include <linux/ctype.h>
84 #include <linux/kd.h>
85 #include <linux/mm.h>
86 #include <linux/string.h>
87 #include <linux/slab.h>
88 #include <linux/poll.h>
89 #include <linux/proc_fs.h>
90 #include <linux/init.h>
91 #include <linux/module.h>
92 #include <linux/device.h>
93 #include <linux/wait.h>
94 #include <linux/bitops.h>
95 #include <linux/delay.h>
96 #include <linux/seq_file.h>
97 #include <linux/serial.h>
98 #include <linux/ratelimit.h>
99
100 #include <linux/uaccess.h>
101
102 #include <linux/kbd_kern.h>
103 #include <linux/vt_kern.h>
104 #include <linux/selection.h>
105
106 #include <linux/kmod.h>
107 #include <linux/nsproxy.h>
108
109 #undef TTY_DEBUG_HANGUP
110 #ifdef TTY_DEBUG_HANGUP
111 # define tty_debug_hangup(tty, f, args...)      tty_debug(tty, f, ##args)
112 #else
113 # define tty_debug_hangup(tty, f, args...)      do { } while (0)
114 #endif
115
116 #define TTY_PARANOIA_CHECK 1
117 #define CHECK_TTY_COUNT 1
118
119 struct ktermios tty_std_termios = {     /* for the benefit of tty drivers  */
120         .c_iflag = ICRNL | IXON,
121         .c_oflag = OPOST | ONLCR,
122         .c_cflag = B38400 | CS8 | CREAD | HUPCL,
123         .c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK |
124                    ECHOCTL | ECHOKE | IEXTEN,
125         .c_cc = INIT_C_CC,
126         .c_ispeed = 38400,
127         .c_ospeed = 38400,
128         /* .c_line = N_TTY, */
129 };
130
131 EXPORT_SYMBOL(tty_std_termios);
132
133 /* This list gets poked at by procfs and various bits of boot up code. This
134    could do with some rationalisation such as pulling the tty proc function
135    into this file */
136
137 LIST_HEAD(tty_drivers);                 /* linked list of tty drivers */
138
139 /* Mutex to protect creating and releasing a tty */
140 DEFINE_MUTEX(tty_mutex);
141
142 static ssize_t tty_read(struct file *, char __user *, size_t, loff_t *);
143 static ssize_t tty_write(struct file *, const char __user *, size_t, loff_t *);
144 ssize_t redirected_tty_write(struct file *, const char __user *,
145                                                         size_t, loff_t *);
146 static unsigned int tty_poll(struct file *, poll_table *);
147 static int tty_open(struct inode *, struct file *);
148 long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
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  *      @dev_t: 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 file *file, const char __user *buf,
439                                  size_t count, loff_t *ppos)
440 {
441         return -EIO;
442 }
443
444 /* No kernel lock held - none needed ;) */
445 static unsigned int hung_up_tty_poll(struct file *filp, poll_table *wait)
446 {
447         return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM;
448 }
449
450 static long hung_up_tty_ioctl(struct file *file, unsigned int cmd,
451                 unsigned long arg)
452 {
453         return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
454 }
455
456 static long hung_up_tty_compat_ioctl(struct file *file,
457                                      unsigned int cmd, unsigned long arg)
458 {
459         return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
460 }
461
462 static int hung_up_tty_fasync(int fd, struct file *file, int on)
463 {
464         return -ENOTTY;
465 }
466
467 static void tty_show_fdinfo(struct seq_file *m, struct file *file)
468 {
469         struct tty_struct *tty = file_tty(file);
470
471         if (tty && tty->ops && tty->ops->show_fdinfo)
472                 tty->ops->show_fdinfo(tty, m);
473 }
474
475 static const struct file_operations tty_fops = {
476         .llseek         = no_llseek,
477         .read           = tty_read,
478         .write          = tty_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          = redirected_tty_write,
492         .poll           = tty_poll,
493         .unlocked_ioctl = tty_ioctl,
494         .compat_ioctl   = tty_compat_ioctl,
495         .open           = tty_open,
496         .release        = tty_release,
497         .fasync         = tty_fasync,
498 };
499
500 static const struct file_operations hung_up_tty_fops = {
501         .llseek         = no_llseek,
502         .read           = hung_up_tty_read,
503         .write          = hung_up_tty_write,
504         .poll           = hung_up_tty_poll,
505         .unlocked_ioctl = hung_up_tty_ioctl,
506         .compat_ioctl   = hung_up_tty_compat_ioctl,
507         .release        = tty_release,
508         .fasync         = hung_up_tty_fasync,
509 };
510
511 static DEFINE_SPINLOCK(redirect_lock);
512 static struct file *redirect;
513
514 extern void tty_sysctl_init(void);
515
516 /**
517  *      tty_wakeup      -       request more data
518  *      @tty: terminal
519  *
520  *      Internal and external helper for wakeups of tty. This function
521  *      informs the line discipline if present that the driver is ready
522  *      to receive more output data.
523  */
524
525 void tty_wakeup(struct tty_struct *tty)
526 {
527         struct tty_ldisc *ld;
528
529         if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) {
530                 ld = tty_ldisc_ref(tty);
531                 if (ld) {
532                         if (ld->ops->write_wakeup)
533                                 ld->ops->write_wakeup(tty);
534                         tty_ldisc_deref(ld);
535                 }
536         }
537         wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
538 }
539
540 EXPORT_SYMBOL_GPL(tty_wakeup);
541
542 /**
543  *      __tty_hangup            -       actual handler for hangup events
544  *      @work: tty device
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 == redirected_tty_write)
608                         cons_filp = filp;
609                 if (filp->f_op->write != 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 timespec *time)
819 {
820         unsigned long sec = get_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 void tty_write_unlock(struct tty_struct *tty)
878 {
879         mutex_unlock(&tty->atomic_write_lock);
880         wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
881 }
882
883 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         const char __user *buf,
903         size_t count)
904 {
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                 ret = -EFAULT;
957                 if (copy_from_user(tty->write_buf, buf, size))
958                         break;
959                 ret = write(tty, file, tty->write_buf, size);
960                 if (ret <= 0)
961                         break;
962                 written += ret;
963                 buf += ret;
964                 count -= ret;
965                 if (!count)
966                         break;
967                 ret = -ERESTARTSYS;
968                 if (signal_pending(current))
969                         break;
970                 cond_resched();
971         }
972         if (written) {
973                 tty_update_time(&file_inode(file)->i_mtime);
974                 ret = written;
975         }
976 out:
977         tty_write_unlock(tty);
978         return ret;
979 }
980
981 /**
982  * tty_write_message - write a message to a certain tty, not just the console.
983  * @tty: the destination tty_struct
984  * @msg: the message to write
985  *
986  * This is used for messages that need to be redirected to a specific tty.
987  * We don't put it into the syslog queue right now maybe in the future if
988  * really needed.
989  *
990  * We must still hold the BTM and test the CLOSING flag for the moment.
991  */
992
993 void tty_write_message(struct tty_struct *tty, char *msg)
994 {
995         if (tty) {
996                 mutex_lock(&tty->atomic_write_lock);
997                 tty_lock(tty);
998                 if (tty->ops->write && tty->count > 0)
999                         tty->ops->write(tty, msg, strlen(msg));
1000                 tty_unlock(tty);
1001                 tty_write_unlock(tty);
1002         }
1003         return;
1004 }
1005
1006
1007 /**
1008  *      tty_write               -       write method for tty device file
1009  *      @file: tty file pointer
1010  *      @buf: user data to write
1011  *      @count: bytes to write
1012  *      @ppos: unused
1013  *
1014  *      Write data to a tty device via the line discipline.
1015  *
1016  *      Locking:
1017  *              Locks the line discipline as required
1018  *              Writes to the tty driver are serialized by the atomic_write_lock
1019  *      and are then processed in chunks to the device. The line discipline
1020  *      write method will not be invoked in parallel for each device.
1021  */
1022
1023 static ssize_t tty_write(struct file *file, const char __user *buf,
1024                                                 size_t count, loff_t *ppos)
1025 {
1026         struct tty_struct *tty = file_tty(file);
1027         struct tty_ldisc *ld;
1028         ssize_t ret;
1029
1030         if (tty_paranoia_check(tty, file_inode(file), "tty_write"))
1031                 return -EIO;
1032         if (!tty || !tty->ops->write || tty_io_error(tty))
1033                         return -EIO;
1034         /* Short term debug to catch buggy drivers */
1035         if (tty->ops->write_room == NULL)
1036                 tty_err(tty, "missing write_room method\n");
1037         ld = tty_ldisc_ref_wait(tty);
1038         if (!ld)
1039                 return hung_up_tty_write(file, buf, count, ppos);
1040         if (!ld->ops->write)
1041                 ret = -EIO;
1042         else
1043                 ret = do_tty_write(ld->ops->write, tty, file, buf, count);
1044         tty_ldisc_deref(ld);
1045         return ret;
1046 }
1047
1048 ssize_t redirected_tty_write(struct file *file, const char __user *buf,
1049                                                 size_t count, loff_t *ppos)
1050 {
1051         struct file *p = NULL;
1052
1053         spin_lock(&redirect_lock);
1054         if (redirect)
1055                 p = get_file(redirect);
1056         spin_unlock(&redirect_lock);
1057
1058         if (p) {
1059                 ssize_t res;
1060                 res = vfs_write(p, buf, count, &p->f_pos);
1061                 fput(p);
1062                 return res;
1063         }
1064         return tty_write(file, buf, count, ppos);
1065 }
1066
1067 /**
1068  *      tty_send_xchar  -       send priority character
1069  *
1070  *      Send a high priority character to the tty even if stopped
1071  *
1072  *      Locking: none for xchar method, write ordering for write method.
1073  */
1074
1075 int tty_send_xchar(struct tty_struct *tty, char ch)
1076 {
1077         int     was_stopped = tty->stopped;
1078
1079         if (tty->ops->send_xchar) {
1080                 down_read(&tty->termios_rwsem);
1081                 tty->ops->send_xchar(tty, ch);
1082                 up_read(&tty->termios_rwsem);
1083                 return 0;
1084         }
1085
1086         if (tty_write_lock(tty, 0) < 0)
1087                 return -ERESTARTSYS;
1088
1089         down_read(&tty->termios_rwsem);
1090         if (was_stopped)
1091                 start_tty(tty);
1092         tty->ops->write(tty, &ch, 1);
1093         if (was_stopped)
1094                 stop_tty(tty);
1095         up_read(&tty->termios_rwsem);
1096         tty_write_unlock(tty);
1097         return 0;
1098 }
1099
1100 static char ptychar[] = "pqrstuvwxyzabcde";
1101
1102 /**
1103  *      pty_line_name   -       generate name for a pty
1104  *      @driver: the tty driver in use
1105  *      @index: the minor number
1106  *      @p: output buffer of at least 6 bytes
1107  *
1108  *      Generate a name from a driver reference and write it to the output
1109  *      buffer.
1110  *
1111  *      Locking: None
1112  */
1113 static void pty_line_name(struct tty_driver *driver, int index, char *p)
1114 {
1115         int i = index + driver->name_base;
1116         /* ->name is initialized to "ttyp", but "tty" is expected */
1117         sprintf(p, "%s%c%x",
1118                 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name,
1119                 ptychar[i >> 4 & 0xf], i & 0xf);
1120 }
1121
1122 /**
1123  *      tty_line_name   -       generate name for a tty
1124  *      @driver: the tty driver in use
1125  *      @index: the minor number
1126  *      @p: output buffer of at least 7 bytes
1127  *
1128  *      Generate a name from a driver reference and write it to the output
1129  *      buffer.
1130  *
1131  *      Locking: None
1132  */
1133 static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p)
1134 {
1135         if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE)
1136                 return sprintf(p, "%s", driver->name);
1137         else
1138                 return sprintf(p, "%s%d", driver->name,
1139                                index + driver->name_base);
1140 }
1141
1142 /**
1143  *      tty_driver_lookup_tty() - find an existing tty, if any
1144  *      @driver: the driver for the tty
1145  *      @idx:    the minor number
1146  *
1147  *      Return the tty, if found. If not found, return NULL or ERR_PTR() if the
1148  *      driver lookup() method returns an error.
1149  *
1150  *      Locking: tty_mutex must be held. If the tty is found, bump the tty kref.
1151  */
1152 static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver,
1153                 struct file *file, int idx)
1154 {
1155         struct tty_struct *tty;
1156
1157         if (driver->ops->lookup) {
1158                 if (!file)
1159                         tty = ERR_PTR(-EIO);
1160                 else
1161                         tty = driver->ops->lookup(driver, file, idx);
1162         } else {
1163                 if (idx >= driver->num)
1164                         return ERR_PTR(-EINVAL);
1165                 tty = driver->ttys[idx];
1166         }
1167         if (!IS_ERR(tty))
1168                 tty_kref_get(tty);
1169         return tty;
1170 }
1171
1172 /**
1173  *      tty_init_termios        -  helper for termios setup
1174  *      @tty: the tty to set up
1175  *
1176  *      Initialise the termios structures for this tty. Thus runs under
1177  *      the tty_mutex currently so we can be relaxed about ordering.
1178  */
1179
1180 void tty_init_termios(struct tty_struct *tty)
1181 {
1182         struct ktermios *tp;
1183         int idx = tty->index;
1184
1185         if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
1186                 tty->termios = tty->driver->init_termios;
1187         else {
1188                 /* Check for lazy saved data */
1189                 tp = tty->driver->termios[idx];
1190                 if (tp != NULL) {
1191                         tty->termios = *tp;
1192                         tty->termios.c_line  = tty->driver->init_termios.c_line;
1193                 } else
1194                         tty->termios = tty->driver->init_termios;
1195         }
1196         /* Compatibility until drivers always set this */
1197         tty->termios.c_ispeed = tty_termios_input_baud_rate(&tty->termios);
1198         tty->termios.c_ospeed = tty_termios_baud_rate(&tty->termios);
1199 }
1200 EXPORT_SYMBOL_GPL(tty_init_termios);
1201
1202 int tty_standard_install(struct tty_driver *driver, struct tty_struct *tty)
1203 {
1204         tty_init_termios(tty);
1205         tty_driver_kref_get(driver);
1206         tty->count++;
1207         driver->ttys[tty->index] = tty;
1208         return 0;
1209 }
1210 EXPORT_SYMBOL_GPL(tty_standard_install);
1211
1212 /**
1213  *      tty_driver_install_tty() - install a tty entry in the driver
1214  *      @driver: the driver for the tty
1215  *      @tty: the tty
1216  *
1217  *      Install a tty object into the driver tables. The tty->index field
1218  *      will be set by the time this is called. This method is responsible
1219  *      for ensuring any need additional structures are allocated and
1220  *      configured.
1221  *
1222  *      Locking: tty_mutex for now
1223  */
1224 static int tty_driver_install_tty(struct tty_driver *driver,
1225                                                 struct tty_struct *tty)
1226 {
1227         return driver->ops->install ? driver->ops->install(driver, tty) :
1228                 tty_standard_install(driver, tty);
1229 }
1230
1231 /**
1232  *      tty_driver_remove_tty() - remove a tty from the driver tables
1233  *      @driver: the driver for the tty
1234  *      @idx:    the minor number
1235  *
1236  *      Remvoe a tty object from the driver tables. The tty->index field
1237  *      will be set by the time this is called.
1238  *
1239  *      Locking: tty_mutex for now
1240  */
1241 static void tty_driver_remove_tty(struct tty_driver *driver, struct tty_struct *tty)
1242 {
1243         if (driver->ops->remove)
1244                 driver->ops->remove(driver, tty);
1245         else
1246                 driver->ttys[tty->index] = NULL;
1247 }
1248
1249 /*
1250  *      tty_reopen()    - fast re-open of an open tty
1251  *      @tty    - the tty to open
1252  *
1253  *      Return 0 on success, -errno on error.
1254  *      Re-opens on master ptys are not allowed and return -EIO.
1255  *
1256  *      Locking: Caller must hold tty_lock
1257  */
1258 static int tty_reopen(struct tty_struct *tty)
1259 {
1260         struct tty_driver *driver = tty->driver;
1261         struct tty_ldisc *ld;
1262         int retval = 0;
1263
1264         if (driver->type == TTY_DRIVER_TYPE_PTY &&
1265             driver->subtype == PTY_TYPE_MASTER)
1266                 return -EIO;
1267
1268         if (!tty->count)
1269                 return -EAGAIN;
1270
1271         if (test_bit(TTY_EXCLUSIVE, &tty->flags) && !capable(CAP_SYS_ADMIN))
1272                 return -EBUSY;
1273
1274         ld = tty_ldisc_ref_wait(tty);
1275         if (ld) {
1276                 tty_ldisc_deref(ld);
1277         } else {
1278                 retval = tty_ldisc_lock(tty, 5 * HZ);
1279                 if (retval)
1280                         return retval;
1281
1282                 if (!tty->ldisc)
1283                         retval = tty_ldisc_reinit(tty, tty->termios.c_line);
1284                 tty_ldisc_unlock(tty);
1285         }
1286
1287         if (retval == 0)
1288                 tty->count++;
1289
1290         return retval;
1291 }
1292
1293 /**
1294  *      tty_init_dev            -       initialise a tty device
1295  *      @driver: tty driver we are opening a device on
1296  *      @idx: device index
1297  *      @ret_tty: returned tty structure
1298  *
1299  *      Prepare a tty device. This may not be a "new" clean device but
1300  *      could also be an active device. The pty drivers require special
1301  *      handling because of this.
1302  *
1303  *      Locking:
1304  *              The function is called under the tty_mutex, which
1305  *      protects us from the tty struct or driver itself going away.
1306  *
1307  *      On exit the tty device has the line discipline attached and
1308  *      a reference count of 1. If a pair was created for pty/tty use
1309  *      and the other was a pty master then it too has a reference count of 1.
1310  *
1311  * WSH 06/09/97: Rewritten to remove races and properly clean up after a
1312  * failed open.  The new code protects the open with a mutex, so it's
1313  * really quite straightforward.  The mutex locking can probably be
1314  * relaxed for the (most common) case of reopening a tty.
1315  */
1316
1317 struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx)
1318 {
1319         struct tty_struct *tty;
1320         int retval;
1321
1322         /*
1323          * First time open is complex, especially for PTY devices.
1324          * This code guarantees that either everything succeeds and the
1325          * TTY is ready for operation, or else the table slots are vacated
1326          * and the allocated memory released.  (Except that the termios
1327          * may be retained.)
1328          */
1329
1330         if (!try_module_get(driver->owner))
1331                 return ERR_PTR(-ENODEV);
1332
1333         tty = alloc_tty_struct(driver, idx);
1334         if (!tty) {
1335                 retval = -ENOMEM;
1336                 goto err_module_put;
1337         }
1338
1339         tty_lock(tty);
1340         retval = tty_driver_install_tty(driver, tty);
1341         if (retval < 0)
1342                 goto err_free_tty;
1343
1344         if (!tty->port)
1345                 tty->port = driver->ports[idx];
1346
1347         WARN_RATELIMIT(!tty->port,
1348                         "%s: %s driver does not set tty->port. This will crash the kernel later. Fix the driver!\n",
1349                         __func__, tty->driver->name);
1350
1351         retval = tty_ldisc_lock(tty, 5 * HZ);
1352         if (retval)
1353                 goto err_release_lock;
1354         tty->port->itty = tty;
1355
1356         /*
1357          * Structures all installed ... call the ldisc open routines.
1358          * If we fail here just call release_tty to clean up.  No need
1359          * to decrement the use counts, as release_tty doesn't care.
1360          */
1361         retval = tty_ldisc_setup(tty, tty->link);
1362         if (retval)
1363                 goto err_release_tty;
1364         tty_ldisc_unlock(tty);
1365         /* Return the tty locked so that it cannot vanish under the caller */
1366         return tty;
1367
1368 err_free_tty:
1369         tty_unlock(tty);
1370         free_tty_struct(tty);
1371 err_module_put:
1372         module_put(driver->owner);
1373         return ERR_PTR(retval);
1374
1375         /* call the tty release_tty routine to clean out this slot */
1376 err_release_tty:
1377         tty_ldisc_unlock(tty);
1378         tty_info_ratelimited(tty, "ldisc open failed (%d), clearing slot %d\n",
1379                              retval, idx);
1380 err_release_lock:
1381         tty_unlock(tty);
1382         release_tty(tty, idx);
1383         return ERR_PTR(retval);
1384 }
1385
1386 static void tty_free_termios(struct tty_struct *tty)
1387 {
1388         struct ktermios *tp;
1389         int idx = tty->index;
1390
1391         /* If the port is going to reset then it has no termios to save */
1392         if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS)
1393                 return;
1394
1395         /* Stash the termios data */
1396         tp = tty->driver->termios[idx];
1397         if (tp == NULL) {
1398                 tp = kmalloc(sizeof(struct ktermios), GFP_KERNEL);
1399                 if (tp == NULL)
1400                         return;
1401                 tty->driver->termios[idx] = tp;
1402         }
1403         *tp = tty->termios;
1404 }
1405
1406 /**
1407  *      tty_flush_works         -       flush all works of a tty/pty pair
1408  *      @tty: tty device to flush works for (or either end of a pty pair)
1409  *
1410  *      Sync flush all works belonging to @tty (and the 'other' tty).
1411  */
1412 static void tty_flush_works(struct tty_struct *tty)
1413 {
1414         flush_work(&tty->SAK_work);
1415         flush_work(&tty->hangup_work);
1416         if (tty->link) {
1417                 flush_work(&tty->link->SAK_work);
1418                 flush_work(&tty->link->hangup_work);
1419         }
1420 }
1421
1422 /**
1423  *      release_one_tty         -       release tty structure memory
1424  *      @kref: kref of tty we are obliterating
1425  *
1426  *      Releases memory associated with a tty structure, and clears out the
1427  *      driver table slots. This function is called when a device is no longer
1428  *      in use. It also gets called when setup of a device fails.
1429  *
1430  *      Locking:
1431  *              takes the file list lock internally when working on the list
1432  *      of ttys that the driver keeps.
1433  *
1434  *      This method gets called from a work queue so that the driver private
1435  *      cleanup ops can sleep (needed for USB at least)
1436  */
1437 static void release_one_tty(struct work_struct *work)
1438 {
1439         struct tty_struct *tty =
1440                 container_of(work, struct tty_struct, hangup_work);
1441         struct tty_driver *driver = tty->driver;
1442         struct module *owner = driver->owner;
1443
1444         if (tty->ops->cleanup)
1445                 tty->ops->cleanup(tty);
1446
1447         tty->magic = 0;
1448         tty_driver_kref_put(driver);
1449         module_put(owner);
1450
1451         spin_lock(&tty->files_lock);
1452         list_del_init(&tty->tty_files);
1453         spin_unlock(&tty->files_lock);
1454
1455         put_pid(tty->pgrp);
1456         put_pid(tty->session);
1457         free_tty_struct(tty);
1458 }
1459
1460 static void queue_release_one_tty(struct kref *kref)
1461 {
1462         struct tty_struct *tty = container_of(kref, struct tty_struct, kref);
1463
1464         /* The hangup queue is now free so we can reuse it rather than
1465            waste a chunk of memory for each port */
1466         INIT_WORK(&tty->hangup_work, release_one_tty);
1467         schedule_work(&tty->hangup_work);
1468 }
1469
1470 /**
1471  *      tty_kref_put            -       release a tty kref
1472  *      @tty: tty device
1473  *
1474  *      Release a reference to a tty device and if need be let the kref
1475  *      layer destruct the object for us
1476  */
1477
1478 void tty_kref_put(struct tty_struct *tty)
1479 {
1480         if (tty)
1481                 kref_put(&tty->kref, queue_release_one_tty);
1482 }
1483 EXPORT_SYMBOL(tty_kref_put);
1484
1485 /**
1486  *      release_tty             -       release tty structure memory
1487  *
1488  *      Release both @tty and a possible linked partner (think pty pair),
1489  *      and decrement the refcount of the backing module.
1490  *
1491  *      Locking:
1492  *              tty_mutex
1493  *              takes the file list lock internally when working on the list
1494  *      of ttys that the driver keeps.
1495  *
1496  */
1497 static void release_tty(struct tty_struct *tty, int idx)
1498 {
1499         /* This should always be true but check for the moment */
1500         WARN_ON(tty->index != idx);
1501         WARN_ON(!mutex_is_locked(&tty_mutex));
1502         if (tty->ops->shutdown)
1503                 tty->ops->shutdown(tty);
1504         tty_free_termios(tty);
1505         tty_driver_remove_tty(tty->driver, tty);
1506         tty->port->itty = NULL;
1507         if (tty->link)
1508                 tty->link->port->itty = NULL;
1509         tty_buffer_cancel_work(tty->port);
1510         if (tty->link)
1511                 tty_buffer_cancel_work(tty->link->port);
1512
1513         tty_kref_put(tty->link);
1514         tty_kref_put(tty);
1515 }
1516
1517 /**
1518  *      tty_release_checks - check a tty before real release
1519  *      @tty: tty to check
1520  *      @o_tty: link of @tty (if any)
1521  *      @idx: index of the tty
1522  *
1523  *      Performs some paranoid checking before true release of the @tty.
1524  *      This is a no-op unless TTY_PARANOIA_CHECK is defined.
1525  */
1526 static int tty_release_checks(struct tty_struct *tty, int idx)
1527 {
1528 #ifdef TTY_PARANOIA_CHECK
1529         if (idx < 0 || idx >= tty->driver->num) {
1530                 tty_debug(tty, "bad idx %d\n", idx);
1531                 return -1;
1532         }
1533
1534         /* not much to check for devpts */
1535         if (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)
1536                 return 0;
1537
1538         if (tty != tty->driver->ttys[idx]) {
1539                 tty_debug(tty, "bad driver table[%d] = %p\n",
1540                           idx, tty->driver->ttys[idx]);
1541                 return -1;
1542         }
1543         if (tty->driver->other) {
1544                 struct tty_struct *o_tty = tty->link;
1545
1546                 if (o_tty != tty->driver->other->ttys[idx]) {
1547                         tty_debug(tty, "bad other table[%d] = %p\n",
1548                                   idx, tty->driver->other->ttys[idx]);
1549                         return -1;
1550                 }
1551                 if (o_tty->link != tty) {
1552                         tty_debug(tty, "bad link = %p\n", o_tty->link);
1553                         return -1;
1554                 }
1555         }
1556 #endif
1557         return 0;
1558 }
1559
1560 /**
1561  *      tty_kclose      -       closes tty opened by tty_kopen
1562  *      @tty: tty device
1563  *
1564  *      Performs the final steps to release and free a tty device. It is the
1565  *      same as tty_release_struct except that it also resets TTY_PORT_KOPENED
1566  *      flag on tty->port.
1567  */
1568 void tty_kclose(struct tty_struct *tty)
1569 {
1570         /*
1571          * Ask the line discipline code to release its structures
1572          */
1573         tty_ldisc_release(tty);
1574
1575         /* Wait for pending work before tty destruction commmences */
1576         tty_flush_works(tty);
1577
1578         tty_debug_hangup(tty, "freeing structure\n");
1579         /*
1580          * The release_tty function takes care of the details of clearing
1581          * the slots and preserving the termios structure. The tty_unlock_pair
1582          * should be safe as we keep a kref while the tty is locked (so the
1583          * unlock never unlocks a freed tty).
1584          */
1585         mutex_lock(&tty_mutex);
1586         tty_port_set_kopened(tty->port, 0);
1587         release_tty(tty, tty->index);
1588         mutex_unlock(&tty_mutex);
1589 }
1590 EXPORT_SYMBOL_GPL(tty_kclose);
1591
1592 /**
1593  *      tty_release_struct      -       release a tty struct
1594  *      @tty: tty device
1595  *      @idx: index of the tty
1596  *
1597  *      Performs the final steps to release and free a tty device. It is
1598  *      roughly the reverse of tty_init_dev.
1599  */
1600 void tty_release_struct(struct tty_struct *tty, int idx)
1601 {
1602         /*
1603          * Ask the line discipline code to release its structures
1604          */
1605         tty_ldisc_release(tty);
1606
1607         /* Wait for pending work before tty destruction commmences */
1608         tty_flush_works(tty);
1609
1610         tty_debug_hangup(tty, "freeing structure\n");
1611         /*
1612          * The release_tty function takes care of the details of clearing
1613          * the slots and preserving the termios structure. The tty_unlock_pair
1614          * should be safe as we keep a kref while the tty is locked (so the
1615          * unlock never unlocks a freed tty).
1616          */
1617         mutex_lock(&tty_mutex);
1618         release_tty(tty, idx);
1619         mutex_unlock(&tty_mutex);
1620 }
1621 EXPORT_SYMBOL_GPL(tty_release_struct);
1622
1623 /**
1624  *      tty_release             -       vfs callback for close
1625  *      @inode: inode of tty
1626  *      @filp: file pointer for handle to tty
1627  *
1628  *      Called the last time each file handle is closed that references
1629  *      this tty. There may however be several such references.
1630  *
1631  *      Locking:
1632  *              Takes bkl. See tty_release_dev
1633  *
1634  * Even releasing the tty structures is a tricky business.. We have
1635  * to be very careful that the structures are all released at the
1636  * same time, as interrupts might otherwise get the wrong pointers.
1637  *
1638  * WSH 09/09/97: rewritten to avoid some nasty race conditions that could
1639  * lead to double frees or releasing memory still in use.
1640  */
1641
1642 int tty_release(struct inode *inode, struct file *filp)
1643 {
1644         struct tty_struct *tty = file_tty(filp);
1645         struct tty_struct *o_tty = NULL;
1646         int     do_sleep, final;
1647         int     idx;
1648         long    timeout = 0;
1649         int     once = 1;
1650
1651         if (tty_paranoia_check(tty, inode, __func__))
1652                 return 0;
1653
1654         tty_lock(tty);
1655         check_tty_count(tty, __func__);
1656
1657         __tty_fasync(-1, filp, 0);
1658
1659         idx = tty->index;
1660         if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
1661             tty->driver->subtype == PTY_TYPE_MASTER)
1662                 o_tty = tty->link;
1663
1664         if (tty_release_checks(tty, idx)) {
1665                 tty_unlock(tty);
1666                 return 0;
1667         }
1668
1669         tty_debug_hangup(tty, "releasing (count=%d)\n", tty->count);
1670
1671         if (tty->ops->close)
1672                 tty->ops->close(tty, filp);
1673
1674         /* If tty is pty master, lock the slave pty (stable lock order) */
1675         tty_lock_slave(o_tty);
1676
1677         /*
1678          * Sanity check: if tty->count is going to zero, there shouldn't be
1679          * any waiters on tty->read_wait or tty->write_wait.  We test the
1680          * wait queues and kick everyone out _before_ actually starting to
1681          * close.  This ensures that we won't block while releasing the tty
1682          * structure.
1683          *
1684          * The test for the o_tty closing is necessary, since the master and
1685          * slave sides may close in any order.  If the slave side closes out
1686          * first, its count will be one, since the master side holds an open.
1687          * Thus this test wouldn't be triggered at the time the slave closed,
1688          * so we do it now.
1689          */
1690         while (1) {
1691                 do_sleep = 0;
1692
1693                 if (tty->count <= 1) {
1694                         if (waitqueue_active(&tty->read_wait)) {
1695                                 wake_up_poll(&tty->read_wait, POLLIN);
1696                                 do_sleep++;
1697                         }
1698                         if (waitqueue_active(&tty->write_wait)) {
1699                                 wake_up_poll(&tty->write_wait, POLLOUT);
1700                                 do_sleep++;
1701                         }
1702                 }
1703                 if (o_tty && o_tty->count <= 1) {
1704                         if (waitqueue_active(&o_tty->read_wait)) {
1705                                 wake_up_poll(&o_tty->read_wait, POLLIN);
1706                                 do_sleep++;
1707                         }
1708                         if (waitqueue_active(&o_tty->write_wait)) {
1709                                 wake_up_poll(&o_tty->write_wait, POLLOUT);
1710                                 do_sleep++;
1711                         }
1712                 }
1713                 if (!do_sleep)
1714                         break;
1715
1716                 if (once) {
1717                         once = 0;
1718                         tty_warn(tty, "read/write wait queue active!\n");
1719                 }
1720                 schedule_timeout_killable(timeout);
1721                 if (timeout < 120 * HZ)
1722                         timeout = 2 * timeout + 1;
1723                 else
1724                         timeout = MAX_SCHEDULE_TIMEOUT;
1725         }
1726
1727         if (o_tty) {
1728                 if (--o_tty->count < 0) {
1729                         tty_warn(tty, "bad slave count (%d)\n", o_tty->count);
1730                         o_tty->count = 0;
1731                 }
1732         }
1733         if (--tty->count < 0) {
1734                 tty_warn(tty, "bad tty->count (%d)\n", tty->count);
1735                 tty->count = 0;
1736         }
1737
1738         /*
1739          * We've decremented tty->count, so we need to remove this file
1740          * descriptor off the tty->tty_files list; this serves two
1741          * purposes:
1742          *  - check_tty_count sees the correct number of file descriptors
1743          *    associated with this tty.
1744          *  - do_tty_hangup no longer sees this file descriptor as
1745          *    something that needs to be handled for hangups.
1746          */
1747         tty_del_file(filp);
1748
1749         /*
1750          * Perform some housekeeping before deciding whether to return.
1751          *
1752          * If _either_ side is closing, make sure there aren't any
1753          * processes that still think tty or o_tty is their controlling
1754          * tty.
1755          */
1756         if (!tty->count) {
1757                 read_lock(&tasklist_lock);
1758                 session_clear_tty(tty->session);
1759                 if (o_tty)
1760                         session_clear_tty(o_tty->session);
1761                 read_unlock(&tasklist_lock);
1762         }
1763
1764         /* check whether both sides are closing ... */
1765         final = !tty->count && !(o_tty && o_tty->count);
1766
1767         tty_unlock_slave(o_tty);
1768         tty_unlock(tty);
1769
1770         /* At this point, the tty->count == 0 should ensure a dead tty
1771            cannot be re-opened by a racing opener */
1772
1773         if (!final)
1774                 return 0;
1775
1776         tty_debug_hangup(tty, "final close\n");
1777
1778         tty_release_struct(tty, idx);
1779         return 0;
1780 }
1781
1782 /**
1783  *      tty_open_current_tty - get locked tty of current task
1784  *      @device: device number
1785  *      @filp: file pointer to tty
1786  *      @return: locked tty of the current task iff @device is /dev/tty
1787  *
1788  *      Performs a re-open of the current task's controlling tty.
1789  *
1790  *      We cannot return driver and index like for the other nodes because
1791  *      devpts will not work then. It expects inodes to be from devpts FS.
1792  */
1793 static struct tty_struct *tty_open_current_tty(dev_t device, struct file *filp)
1794 {
1795         struct tty_struct *tty;
1796         int retval;
1797
1798         if (device != MKDEV(TTYAUX_MAJOR, 0))
1799                 return NULL;
1800
1801         tty = get_current_tty();
1802         if (!tty)
1803                 return ERR_PTR(-ENXIO);
1804
1805         filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */
1806         /* noctty = 1; */
1807         tty_lock(tty);
1808         tty_kref_put(tty);      /* safe to drop the kref now */
1809
1810         retval = tty_reopen(tty);
1811         if (retval < 0) {
1812                 tty_unlock(tty);
1813                 tty = ERR_PTR(retval);
1814         }
1815         return tty;
1816 }
1817
1818 /**
1819  *      tty_lookup_driver - lookup a tty driver for a given device file
1820  *      @device: device number
1821  *      @filp: file pointer to tty
1822  *      @index: index for the device in the @return driver
1823  *      @return: driver for this inode (with increased refcount)
1824  *
1825  *      If @return is not erroneous, the caller is responsible to decrement the
1826  *      refcount by tty_driver_kref_put.
1827  *
1828  *      Locking: tty_mutex protects get_tty_driver
1829  */
1830 static struct tty_driver *tty_lookup_driver(dev_t device, struct file *filp,
1831                 int *index)
1832 {
1833         struct tty_driver *driver;
1834
1835         switch (device) {
1836 #ifdef CONFIG_VT
1837         case MKDEV(TTY_MAJOR, 0): {
1838                 extern struct tty_driver *console_driver;
1839                 driver = tty_driver_kref_get(console_driver);
1840                 *index = fg_console;
1841                 break;
1842         }
1843 #endif
1844         case MKDEV(TTYAUX_MAJOR, 1): {
1845                 struct tty_driver *console_driver = console_device(index);
1846                 if (console_driver) {
1847                         driver = tty_driver_kref_get(console_driver);
1848                         if (driver && filp) {
1849                                 /* Don't let /dev/console block */
1850                                 filp->f_flags |= O_NONBLOCK;
1851                                 break;
1852                         }
1853                 }
1854                 return ERR_PTR(-ENODEV);
1855         }
1856         default:
1857                 driver = get_tty_driver(device, index);
1858                 if (!driver)
1859                         return ERR_PTR(-ENODEV);
1860                 break;
1861         }
1862         return driver;
1863 }
1864
1865 /**
1866  *      tty_kopen       -       open a tty device for kernel
1867  *      @device: dev_t of device to open
1868  *
1869  *      Opens tty exclusively for kernel. Performs the driver lookup,
1870  *      makes sure it's not already opened and performs the first-time
1871  *      tty initialization.
1872  *
1873  *      Returns the locked initialized &tty_struct
1874  *
1875  *      Claims the global tty_mutex to serialize:
1876  *        - concurrent first-time tty initialization
1877  *        - concurrent tty driver removal w/ lookup
1878  *        - concurrent tty removal from driver table
1879  */
1880 struct tty_struct *tty_kopen(dev_t device)
1881 {
1882         struct tty_struct *tty;
1883         struct tty_driver *driver = NULL;
1884         int index = -1;
1885
1886         mutex_lock(&tty_mutex);
1887         driver = tty_lookup_driver(device, NULL, &index);
1888         if (IS_ERR(driver)) {
1889                 mutex_unlock(&tty_mutex);
1890                 return ERR_CAST(driver);
1891         }
1892
1893         /* check whether we're reopening an existing tty */
1894         tty = tty_driver_lookup_tty(driver, NULL, index);
1895         if (IS_ERR(tty))
1896                 goto out;
1897
1898         if (tty) {
1899                 /* drop kref from tty_driver_lookup_tty() */
1900                 tty_kref_put(tty);
1901                 tty = ERR_PTR(-EBUSY);
1902         } else { /* tty_init_dev returns tty with the tty_lock held */
1903                 tty = tty_init_dev(driver, index);
1904                 if (IS_ERR(tty))
1905                         goto out;
1906                 tty_port_set_kopened(tty->port, 1);
1907         }
1908 out:
1909         mutex_unlock(&tty_mutex);
1910         tty_driver_kref_put(driver);
1911         return tty;
1912 }
1913 EXPORT_SYMBOL_GPL(tty_kopen);
1914
1915 /**
1916  *      tty_open_by_driver      -       open a tty device
1917  *      @device: dev_t of device to open
1918  *      @inode: inode of device file
1919  *      @filp: file pointer to tty
1920  *
1921  *      Performs the driver lookup, checks for a reopen, or otherwise
1922  *      performs the first-time tty initialization.
1923  *
1924  *      Returns the locked initialized or re-opened &tty_struct
1925  *
1926  *      Claims the global tty_mutex to serialize:
1927  *        - concurrent first-time tty initialization
1928  *        - concurrent tty driver removal w/ lookup
1929  *        - concurrent tty removal from driver table
1930  */
1931 static struct tty_struct *tty_open_by_driver(dev_t device, struct inode *inode,
1932                                              struct file *filp)
1933 {
1934         struct tty_struct *tty;
1935         struct tty_driver *driver = NULL;
1936         int index = -1;
1937         int retval;
1938
1939         mutex_lock(&tty_mutex);
1940         driver = tty_lookup_driver(device, filp, &index);
1941         if (IS_ERR(driver)) {
1942                 mutex_unlock(&tty_mutex);
1943                 return ERR_CAST(driver);
1944         }
1945
1946         /* check whether we're reopening an existing tty */
1947         tty = tty_driver_lookup_tty(driver, filp, index);
1948         if (IS_ERR(tty)) {
1949                 mutex_unlock(&tty_mutex);
1950                 goto out;
1951         }
1952
1953         if (tty) {
1954                 if (tty_port_kopened(tty->port)) {
1955                         tty_kref_put(tty);
1956                         mutex_unlock(&tty_mutex);
1957                         tty = ERR_PTR(-EBUSY);
1958                         goto out;
1959                 }
1960                 mutex_unlock(&tty_mutex);
1961                 retval = tty_lock_interruptible(tty);
1962                 tty_kref_put(tty);  /* drop kref from tty_driver_lookup_tty() */
1963                 if (retval) {
1964                         if (retval == -EINTR)
1965                                 retval = -ERESTARTSYS;
1966                         tty = ERR_PTR(retval);
1967                         goto out;
1968                 }
1969                 retval = tty_reopen(tty);
1970                 if (retval < 0) {
1971                         tty_unlock(tty);
1972                         tty = ERR_PTR(retval);
1973                 }
1974         } else { /* Returns with the tty_lock held for now */
1975                 tty = tty_init_dev(driver, index);
1976                 mutex_unlock(&tty_mutex);
1977         }
1978 out:
1979         tty_driver_kref_put(driver);
1980         return tty;
1981 }
1982
1983 /**
1984  *      tty_open                -       open a tty device
1985  *      @inode: inode of device file
1986  *      @filp: file pointer to tty
1987  *
1988  *      tty_open and tty_release keep up the tty count that contains the
1989  *      number of opens done on a tty. We cannot use the inode-count, as
1990  *      different inodes might point to the same tty.
1991  *
1992  *      Open-counting is needed for pty masters, as well as for keeping
1993  *      track of serial lines: DTR is dropped when the last close happens.
1994  *      (This is not done solely through tty->count, now.  - Ted 1/27/92)
1995  *
1996  *      The termios state of a pty is reset on first open so that
1997  *      settings don't persist across reuse.
1998  *
1999  *      Locking: tty_mutex protects tty, tty_lookup_driver and tty_init_dev.
2000  *               tty->count should protect the rest.
2001  *               ->siglock protects ->signal/->sighand
2002  *
2003  *      Note: the tty_unlock/lock cases without a ref are only safe due to
2004  *      tty_mutex
2005  */
2006
2007 static int tty_open(struct inode *inode, struct file *filp)
2008 {
2009         struct tty_struct *tty;
2010         int noctty, retval;
2011         dev_t device = inode->i_rdev;
2012         unsigned saved_flags = filp->f_flags;
2013
2014         nonseekable_open(inode, filp);
2015
2016 retry_open:
2017         retval = tty_alloc_file(filp);
2018         if (retval)
2019                 return -ENOMEM;
2020
2021         tty = tty_open_current_tty(device, filp);
2022         if (!tty)
2023                 tty = tty_open_by_driver(device, inode, filp);
2024
2025         if (IS_ERR(tty)) {
2026                 tty_free_file(filp);
2027                 retval = PTR_ERR(tty);
2028                 if (retval != -EAGAIN || signal_pending(current))
2029                         return retval;
2030                 schedule();
2031                 goto retry_open;
2032         }
2033
2034         tty_add_file(tty, filp);
2035
2036         check_tty_count(tty, __func__);
2037         tty_debug_hangup(tty, "opening (count=%d)\n", tty->count);
2038
2039         if (tty->ops->open)
2040                 retval = tty->ops->open(tty, filp);
2041         else
2042                 retval = -ENODEV;
2043         filp->f_flags = saved_flags;
2044
2045         if (retval) {
2046                 tty_debug_hangup(tty, "open error %d, releasing\n", retval);
2047
2048                 tty_unlock(tty); /* need to call tty_release without BTM */
2049                 tty_release(inode, filp);
2050                 if (retval != -ERESTARTSYS)
2051                         return retval;
2052
2053                 if (signal_pending(current))
2054                         return retval;
2055
2056                 schedule();
2057                 /*
2058                  * Need to reset f_op in case a hangup happened.
2059                  */
2060                 if (tty_hung_up_p(filp))
2061                         filp->f_op = &tty_fops;
2062                 goto retry_open;
2063         }
2064         clear_bit(TTY_HUPPED, &tty->flags);
2065
2066         noctty = (filp->f_flags & O_NOCTTY) ||
2067                  (IS_ENABLED(CONFIG_VT) && device == MKDEV(TTY_MAJOR, 0)) ||
2068                  device == MKDEV(TTYAUX_MAJOR, 1) ||
2069                  (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2070                   tty->driver->subtype == PTY_TYPE_MASTER);
2071         if (!noctty)
2072                 tty_open_proc_set_tty(filp, tty);
2073         tty_unlock(tty);
2074         return 0;
2075 }
2076
2077
2078
2079 /**
2080  *      tty_poll        -       check tty status
2081  *      @filp: file being polled
2082  *      @wait: poll wait structures to update
2083  *
2084  *      Call the line discipline polling method to obtain the poll
2085  *      status of the device.
2086  *
2087  *      Locking: locks called line discipline but ldisc poll method
2088  *      may be re-entered freely by other callers.
2089  */
2090
2091 static unsigned int tty_poll(struct file *filp, poll_table *wait)
2092 {
2093         struct tty_struct *tty = file_tty(filp);
2094         struct tty_ldisc *ld;
2095         int ret = 0;
2096
2097         if (tty_paranoia_check(tty, file_inode(filp), "tty_poll"))
2098                 return 0;
2099
2100         ld = tty_ldisc_ref_wait(tty);
2101         if (!ld)
2102                 return hung_up_tty_poll(filp, wait);
2103         if (ld->ops->poll)
2104                 ret = ld->ops->poll(tty, filp, wait);
2105         tty_ldisc_deref(ld);
2106         return ret;
2107 }
2108
2109 static int __tty_fasync(int fd, struct file *filp, int on)
2110 {
2111         struct tty_struct *tty = file_tty(filp);
2112         unsigned long flags;
2113         int retval = 0;
2114
2115         if (tty_paranoia_check(tty, file_inode(filp), "tty_fasync"))
2116                 goto out;
2117
2118         retval = fasync_helper(fd, filp, on, &tty->fasync);
2119         if (retval <= 0)
2120                 goto out;
2121
2122         if (on) {
2123                 enum pid_type type;
2124                 struct pid *pid;
2125
2126                 spin_lock_irqsave(&tty->ctrl_lock, flags);
2127                 if (tty->pgrp) {
2128                         pid = tty->pgrp;
2129                         type = PIDTYPE_PGID;
2130                 } else {
2131                         pid = task_pid(current);
2132                         type = PIDTYPE_PID;
2133                 }
2134                 get_pid(pid);
2135                 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2136                 __f_setown(filp, pid, type, 0);
2137                 put_pid(pid);
2138                 retval = 0;
2139         }
2140 out:
2141         return retval;
2142 }
2143
2144 static int tty_fasync(int fd, struct file *filp, int on)
2145 {
2146         struct tty_struct *tty = file_tty(filp);
2147         int retval = -ENOTTY;
2148
2149         tty_lock(tty);
2150         if (!tty_hung_up_p(filp))
2151                 retval = __tty_fasync(fd, filp, on);
2152         tty_unlock(tty);
2153
2154         return retval;
2155 }
2156
2157 /**
2158  *      tiocsti                 -       fake input character
2159  *      @tty: tty to fake input into
2160  *      @p: pointer to character
2161  *
2162  *      Fake input to a tty device. Does the necessary locking and
2163  *      input management.
2164  *
2165  *      FIXME: does not honour flow control ??
2166  *
2167  *      Locking:
2168  *              Called functions take tty_ldiscs_lock
2169  *              current->signal->tty check is safe without locks
2170  */
2171
2172 static int tiocsti(struct tty_struct *tty, char __user *p)
2173 {
2174         char ch, mbz = 0;
2175         struct tty_ldisc *ld;
2176
2177         if ((current->signal->tty != tty) && !capable(CAP_SYS_ADMIN))
2178                 return -EPERM;
2179         if (get_user(ch, p))
2180                 return -EFAULT;
2181         tty_audit_tiocsti(tty, ch);
2182         ld = tty_ldisc_ref_wait(tty);
2183         if (!ld)
2184                 return -EIO;
2185         tty_buffer_lock_exclusive(tty->port);
2186         if (ld->ops->receive_buf)
2187                 ld->ops->receive_buf(tty, &ch, &mbz, 1);
2188         tty_buffer_unlock_exclusive(tty->port);
2189         tty_ldisc_deref(ld);
2190         return 0;
2191 }
2192
2193 /**
2194  *      tiocgwinsz              -       implement window query ioctl
2195  *      @tty; tty
2196  *      @arg: user buffer for result
2197  *
2198  *      Copies the kernel idea of the window size into the user buffer.
2199  *
2200  *      Locking: tty->winsize_mutex is taken to ensure the winsize data
2201  *              is consistent.
2202  */
2203
2204 static int tiocgwinsz(struct tty_struct *tty, struct winsize __user *arg)
2205 {
2206         int err;
2207
2208         mutex_lock(&tty->winsize_mutex);
2209         err = copy_to_user(arg, &tty->winsize, sizeof(*arg));
2210         mutex_unlock(&tty->winsize_mutex);
2211
2212         return err ? -EFAULT: 0;
2213 }
2214
2215 /**
2216  *      tty_do_resize           -       resize event
2217  *      @tty: tty being resized
2218  *      @rows: rows (character)
2219  *      @cols: cols (character)
2220  *
2221  *      Update the termios variables and send the necessary signals to
2222  *      peform a terminal resize correctly
2223  */
2224
2225 int tty_do_resize(struct tty_struct *tty, struct winsize *ws)
2226 {
2227         struct pid *pgrp;
2228
2229         /* Lock the tty */
2230         mutex_lock(&tty->winsize_mutex);
2231         if (!memcmp(ws, &tty->winsize, sizeof(*ws)))
2232                 goto done;
2233
2234         /* Signal the foreground process group */
2235         pgrp = tty_get_pgrp(tty);
2236         if (pgrp)
2237                 kill_pgrp(pgrp, SIGWINCH, 1);
2238         put_pid(pgrp);
2239
2240         tty->winsize = *ws;
2241 done:
2242         mutex_unlock(&tty->winsize_mutex);
2243         return 0;
2244 }
2245 EXPORT_SYMBOL(tty_do_resize);
2246
2247 /**
2248  *      tiocswinsz              -       implement window size set ioctl
2249  *      @tty; tty side of tty
2250  *      @arg: user buffer for result
2251  *
2252  *      Copies the user idea of the window size to the kernel. Traditionally
2253  *      this is just advisory information but for the Linux console it
2254  *      actually has driver level meaning and triggers a VC resize.
2255  *
2256  *      Locking:
2257  *              Driver dependent. The default do_resize method takes the
2258  *      tty termios mutex and ctrl_lock. The console takes its own lock
2259  *      then calls into the default method.
2260  */
2261
2262 static int tiocswinsz(struct tty_struct *tty, struct winsize __user *arg)
2263 {
2264         struct winsize tmp_ws;
2265         if (copy_from_user(&tmp_ws, arg, sizeof(*arg)))
2266                 return -EFAULT;
2267
2268         if (tty->ops->resize)
2269                 return tty->ops->resize(tty, &tmp_ws);
2270         else
2271                 return tty_do_resize(tty, &tmp_ws);
2272 }
2273
2274 /**
2275  *      tioccons        -       allow admin to move logical console
2276  *      @file: the file to become console
2277  *
2278  *      Allow the administrator to move the redirected console device
2279  *
2280  *      Locking: uses redirect_lock to guard the redirect information
2281  */
2282
2283 static int tioccons(struct file *file)
2284 {
2285         if (!capable(CAP_SYS_ADMIN))
2286                 return -EPERM;
2287         if (file->f_op->write == redirected_tty_write) {
2288                 struct file *f;
2289                 spin_lock(&redirect_lock);
2290                 f = redirect;
2291                 redirect = NULL;
2292                 spin_unlock(&redirect_lock);
2293                 if (f)
2294                         fput(f);
2295                 return 0;
2296         }
2297         spin_lock(&redirect_lock);
2298         if (redirect) {
2299                 spin_unlock(&redirect_lock);
2300                 return -EBUSY;
2301         }
2302         redirect = get_file(file);
2303         spin_unlock(&redirect_lock);
2304         return 0;
2305 }
2306
2307 /**
2308  *      fionbio         -       non blocking ioctl
2309  *      @file: file to set blocking value
2310  *      @p: user parameter
2311  *
2312  *      Historical tty interfaces had a blocking control ioctl before
2313  *      the generic functionality existed. This piece of history is preserved
2314  *      in the expected tty API of posix OS's.
2315  *
2316  *      Locking: none, the open file handle ensures it won't go away.
2317  */
2318
2319 static int fionbio(struct file *file, int __user *p)
2320 {
2321         int nonblock;
2322
2323         if (get_user(nonblock, p))
2324                 return -EFAULT;
2325
2326         spin_lock(&file->f_lock);
2327         if (nonblock)
2328                 file->f_flags |= O_NONBLOCK;
2329         else
2330                 file->f_flags &= ~O_NONBLOCK;
2331         spin_unlock(&file->f_lock);
2332         return 0;
2333 }
2334
2335 /**
2336  *      tiocsetd        -       set line discipline
2337  *      @tty: tty device
2338  *      @p: pointer to user data
2339  *
2340  *      Set the line discipline according to user request.
2341  *
2342  *      Locking: see tty_set_ldisc, this function is just a helper
2343  */
2344
2345 static int tiocsetd(struct tty_struct *tty, int __user *p)
2346 {
2347         int disc;
2348         int ret;
2349
2350         if (get_user(disc, p))
2351                 return -EFAULT;
2352
2353         ret = tty_set_ldisc(tty, disc);
2354
2355         return ret;
2356 }
2357
2358 /**
2359  *      tiocgetd        -       get line discipline
2360  *      @tty: tty device
2361  *      @p: pointer to user data
2362  *
2363  *      Retrieves the line discipline id directly from the ldisc.
2364  *
2365  *      Locking: waits for ldisc reference (in case the line discipline
2366  *              is changing or the tty is being hungup)
2367  */
2368
2369 static int tiocgetd(struct tty_struct *tty, int __user *p)
2370 {
2371         struct tty_ldisc *ld;
2372         int ret;
2373
2374         ld = tty_ldisc_ref_wait(tty);
2375         if (!ld)
2376                 return -EIO;
2377         ret = put_user(ld->ops->num, p);
2378         tty_ldisc_deref(ld);
2379         return ret;
2380 }
2381
2382 /**
2383  *      send_break      -       performed time break
2384  *      @tty: device to break on
2385  *      @duration: timeout in mS
2386  *
2387  *      Perform a timed break on hardware that lacks its own driver level
2388  *      timed break functionality.
2389  *
2390  *      Locking:
2391  *              atomic_write_lock serializes
2392  *
2393  */
2394
2395 static int send_break(struct tty_struct *tty, unsigned int duration)
2396 {
2397         int retval;
2398
2399         if (tty->ops->break_ctl == NULL)
2400                 return 0;
2401
2402         if (tty->driver->flags & TTY_DRIVER_HARDWARE_BREAK)
2403                 retval = tty->ops->break_ctl(tty, duration);
2404         else {
2405                 /* Do the work ourselves */
2406                 if (tty_write_lock(tty, 0) < 0)
2407                         return -EINTR;
2408                 retval = tty->ops->break_ctl(tty, -1);
2409                 if (retval)
2410                         goto out;
2411                 if (!signal_pending(current))
2412                         msleep_interruptible(duration);
2413                 retval = tty->ops->break_ctl(tty, 0);
2414 out:
2415                 tty_write_unlock(tty);
2416                 if (signal_pending(current))
2417                         retval = -EINTR;
2418         }
2419         return retval;
2420 }
2421
2422 /**
2423  *      tty_tiocmget            -       get modem status
2424  *      @tty: tty device
2425  *      @file: user file pointer
2426  *      @p: pointer to result
2427  *
2428  *      Obtain the modem status bits from the tty driver if the feature
2429  *      is supported. Return -ENOTTY if it is not available.
2430  *
2431  *      Locking: none (up to the driver)
2432  */
2433
2434 static int tty_tiocmget(struct tty_struct *tty, int __user *p)
2435 {
2436         int retval = -ENOTTY;
2437
2438         if (tty->ops->tiocmget) {
2439                 retval = tty->ops->tiocmget(tty);
2440
2441                 if (retval >= 0)
2442                         retval = put_user(retval, p);
2443         }
2444         return retval;
2445 }
2446
2447 /**
2448  *      tty_tiocmset            -       set modem status
2449  *      @tty: tty device
2450  *      @cmd: command - clear bits, set bits or set all
2451  *      @p: pointer to desired bits
2452  *
2453  *      Set the modem status bits from the tty driver if the feature
2454  *      is supported. Return -ENOTTY if it is not available.
2455  *
2456  *      Locking: none (up to the driver)
2457  */
2458
2459 static int tty_tiocmset(struct tty_struct *tty, unsigned int cmd,
2460              unsigned __user *p)
2461 {
2462         int retval;
2463         unsigned int set, clear, val;
2464
2465         if (tty->ops->tiocmset == NULL)
2466                 return -ENOTTY;
2467
2468         retval = get_user(val, p);
2469         if (retval)
2470                 return retval;
2471         set = clear = 0;
2472         switch (cmd) {
2473         case TIOCMBIS:
2474                 set = val;
2475                 break;
2476         case TIOCMBIC:
2477                 clear = val;
2478                 break;
2479         case TIOCMSET:
2480                 set = val;
2481                 clear = ~val;
2482                 break;
2483         }
2484         set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2485         clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2|TIOCM_LOOP;
2486         return tty->ops->tiocmset(tty, set, clear);
2487 }
2488
2489 static int tty_tiocgicount(struct tty_struct *tty, void __user *arg)
2490 {
2491         int retval = -EINVAL;
2492         struct serial_icounter_struct icount;
2493         memset(&icount, 0, sizeof(icount));
2494         if (tty->ops->get_icount)
2495                 retval = tty->ops->get_icount(tty, &icount);
2496         if (retval != 0)
2497                 return retval;
2498         if (copy_to_user(arg, &icount, sizeof(icount)))
2499                 return -EFAULT;
2500         return 0;
2501 }
2502
2503 static void tty_warn_deprecated_flags(struct serial_struct __user *ss)
2504 {
2505         static DEFINE_RATELIMIT_STATE(depr_flags,
2506                         DEFAULT_RATELIMIT_INTERVAL,
2507                         DEFAULT_RATELIMIT_BURST);
2508         char comm[TASK_COMM_LEN];
2509         int flags;
2510
2511         if (get_user(flags, &ss->flags))
2512                 return;
2513
2514         flags &= ASYNC_DEPRECATED;
2515
2516         if (flags && __ratelimit(&depr_flags))
2517                 pr_warn("%s: '%s' is using deprecated serial flags (with no effect): %.8x\n",
2518                         __func__, get_task_comm(comm, current), flags);
2519 }
2520
2521 /*
2522  * if pty, return the slave side (real_tty)
2523  * otherwise, return self
2524  */
2525 static struct tty_struct *tty_pair_get_tty(struct tty_struct *tty)
2526 {
2527         if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
2528             tty->driver->subtype == PTY_TYPE_MASTER)
2529                 tty = tty->link;
2530         return tty;
2531 }
2532
2533 /*
2534  * Split this up, as gcc can choke on it otherwise..
2535  */
2536 long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2537 {
2538         struct tty_struct *tty = file_tty(file);
2539         struct tty_struct *real_tty;
2540         void __user *p = (void __user *)arg;
2541         int retval;
2542         struct tty_ldisc *ld;
2543
2544         if (tty_paranoia_check(tty, file_inode(file), "tty_ioctl"))
2545                 return -EINVAL;
2546
2547         real_tty = tty_pair_get_tty(tty);
2548
2549         /*
2550          * Factor out some common prep work
2551          */
2552         switch (cmd) {
2553         case TIOCSETD:
2554         case TIOCSBRK:
2555         case TIOCCBRK:
2556         case TCSBRK:
2557         case TCSBRKP:
2558                 retval = tty_check_change(tty);
2559                 if (retval)
2560                         return retval;
2561                 if (cmd != TIOCCBRK) {
2562                         tty_wait_until_sent(tty, 0);
2563                         if (signal_pending(current))
2564                                 return -EINTR;
2565                 }
2566                 break;
2567         }
2568
2569         /*
2570          *      Now do the stuff.
2571          */
2572         switch (cmd) {
2573         case TIOCSTI:
2574                 return tiocsti(tty, p);
2575         case TIOCGWINSZ:
2576                 return tiocgwinsz(real_tty, p);
2577         case TIOCSWINSZ:
2578                 return tiocswinsz(real_tty, p);
2579         case TIOCCONS:
2580                 return real_tty != tty ? -EINVAL : tioccons(file);
2581         case FIONBIO:
2582                 return fionbio(file, p);
2583         case TIOCEXCL:
2584                 set_bit(TTY_EXCLUSIVE, &tty->flags);
2585                 return 0;
2586         case TIOCNXCL:
2587                 clear_bit(TTY_EXCLUSIVE, &tty->flags);
2588                 return 0;
2589         case TIOCGEXCL:
2590         {
2591                 int excl = test_bit(TTY_EXCLUSIVE, &tty->flags);
2592                 return put_user(excl, (int __user *)p);
2593         }
2594         case TIOCGETD:
2595                 return tiocgetd(tty, p);
2596         case TIOCSETD:
2597                 return tiocsetd(tty, p);
2598         case TIOCVHANGUP:
2599                 if (!capable(CAP_SYS_ADMIN))
2600                         return -EPERM;
2601                 tty_vhangup(tty);
2602                 return 0;
2603         case TIOCGDEV:
2604         {
2605                 unsigned int ret = new_encode_dev(tty_devnum(real_tty));
2606                 return put_user(ret, (unsigned int __user *)p);
2607         }
2608         /*
2609          * Break handling
2610          */
2611         case TIOCSBRK:  /* Turn break on, unconditionally */
2612                 if (tty->ops->break_ctl)
2613                         return tty->ops->break_ctl(tty, -1);
2614                 return 0;
2615         case TIOCCBRK:  /* Turn break off, unconditionally */
2616                 if (tty->ops->break_ctl)
2617                         return tty->ops->break_ctl(tty, 0);
2618                 return 0;
2619         case TCSBRK:   /* SVID version: non-zero arg --> no break */
2620                 /* non-zero arg means wait for all output data
2621                  * to be sent (performed above) but don't send break.
2622                  * This is used by the tcdrain() termios function.
2623                  */
2624                 if (!arg)
2625                         return send_break(tty, 250);
2626                 return 0;
2627         case TCSBRKP:   /* support for POSIX tcsendbreak() */
2628                 return send_break(tty, arg ? arg*100 : 250);
2629
2630         case TIOCMGET:
2631                 return tty_tiocmget(tty, p);
2632         case TIOCMSET:
2633         case TIOCMBIC:
2634         case TIOCMBIS:
2635                 return tty_tiocmset(tty, cmd, p);
2636         case TIOCGICOUNT:
2637                 retval = tty_tiocgicount(tty, p);
2638                 /* For the moment allow fall through to the old method */
2639                 if (retval != -EINVAL)
2640                         return retval;
2641                 break;
2642         case TCFLSH:
2643                 switch (arg) {
2644                 case TCIFLUSH:
2645                 case TCIOFLUSH:
2646                 /* flush tty buffer and allow ldisc to process ioctl */
2647                         tty_buffer_flush(tty, NULL);
2648                         break;
2649                 }
2650                 break;
2651         case TIOCSSERIAL:
2652                 tty_warn_deprecated_flags(p);
2653                 break;
2654         case TIOCGPTPEER:
2655                 /* Special because the struct file is needed */
2656                 return ptm_open_peer(file, tty, (int)arg);
2657         default:
2658                 retval = tty_jobctrl_ioctl(tty, real_tty, file, cmd, arg);
2659                 if (retval != -ENOIOCTLCMD)
2660                         return retval;
2661         }
2662         if (tty->ops->ioctl) {
2663                 retval = tty->ops->ioctl(tty, cmd, arg);
2664                 if (retval != -ENOIOCTLCMD)
2665                         return retval;
2666         }
2667         ld = tty_ldisc_ref_wait(tty);
2668         if (!ld)
2669                 return hung_up_tty_ioctl(file, cmd, arg);
2670         retval = -EINVAL;
2671         if (ld->ops->ioctl) {
2672                 retval = ld->ops->ioctl(tty, file, cmd, arg);
2673                 if (retval == -ENOIOCTLCMD)
2674                         retval = -ENOTTY;
2675         }
2676         tty_ldisc_deref(ld);
2677         return retval;
2678 }
2679
2680 #ifdef CONFIG_COMPAT
2681 static long tty_compat_ioctl(struct file *file, unsigned int cmd,
2682                                 unsigned long arg)
2683 {
2684         struct tty_struct *tty = file_tty(file);
2685         struct tty_ldisc *ld;
2686         int retval = -ENOIOCTLCMD;
2687
2688         if (tty_paranoia_check(tty, file_inode(file), "tty_ioctl"))
2689                 return -EINVAL;
2690
2691         if (tty->ops->compat_ioctl) {
2692                 retval = tty->ops->compat_ioctl(tty, cmd, arg);
2693                 if (retval != -ENOIOCTLCMD)
2694                         return retval;
2695         }
2696
2697         ld = tty_ldisc_ref_wait(tty);
2698         if (!ld)
2699                 return hung_up_tty_compat_ioctl(file, cmd, arg);
2700         if (ld->ops->compat_ioctl)
2701                 retval = ld->ops->compat_ioctl(tty, file, cmd, arg);
2702         else
2703                 retval = n_tty_compat_ioctl_helper(tty, file, cmd, arg);
2704         tty_ldisc_deref(ld);
2705
2706         return retval;
2707 }
2708 #endif
2709
2710 static int this_tty(const void *t, struct file *file, unsigned fd)
2711 {
2712         if (likely(file->f_op->read != tty_read))
2713                 return 0;
2714         return file_tty(file) != t ? 0 : fd + 1;
2715 }
2716         
2717 /*
2718  * This implements the "Secure Attention Key" ---  the idea is to
2719  * prevent trojan horses by killing all processes associated with this
2720  * tty when the user hits the "Secure Attention Key".  Required for
2721  * super-paranoid applications --- see the Orange Book for more details.
2722  *
2723  * This code could be nicer; ideally it should send a HUP, wait a few
2724  * seconds, then send a INT, and then a KILL signal.  But you then
2725  * have to coordinate with the init process, since all processes associated
2726  * with the current tty must be dead before the new getty is allowed
2727  * to spawn.
2728  *
2729  * Now, if it would be correct ;-/ The current code has a nasty hole -
2730  * it doesn't catch files in flight. We may send the descriptor to ourselves
2731  * via AF_UNIX socket, close it and later fetch from socket. FIXME.
2732  *
2733  * Nasty bug: do_SAK is being called in interrupt context.  This can
2734  * deadlock.  We punt it up to process context.  AKPM - 16Mar2001
2735  */
2736 void __do_SAK(struct tty_struct *tty)
2737 {
2738 #ifdef TTY_SOFT_SAK
2739         tty_hangup(tty);
2740 #else
2741         struct task_struct *g, *p;
2742         struct pid *session;
2743         int             i;
2744         unsigned long flags;
2745
2746         if (!tty)
2747                 return;
2748
2749         spin_lock_irqsave(&tty->ctrl_lock, flags);
2750         session = get_pid(tty->session);
2751         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
2752
2753         tty_ldisc_flush(tty);
2754
2755         tty_driver_flush_buffer(tty);
2756
2757         read_lock(&tasklist_lock);
2758         /* Kill the entire session */
2759         do_each_pid_task(session, PIDTYPE_SID, p) {
2760                 tty_notice(tty, "SAK: killed process %d (%s): by session\n",
2761                            task_pid_nr(p), p->comm);
2762                 send_sig(SIGKILL, p, 1);
2763         } while_each_pid_task(session, PIDTYPE_SID, p);
2764
2765         /* Now kill any processes that happen to have the tty open */
2766         do_each_thread(g, p) {
2767                 if (p->signal->tty == tty) {
2768                         tty_notice(tty, "SAK: killed process %d (%s): by controlling tty\n",
2769                                    task_pid_nr(p), p->comm);
2770                         send_sig(SIGKILL, p, 1);
2771                         continue;
2772                 }
2773                 task_lock(p);
2774                 i = iterate_fd(p->files, 0, this_tty, tty);
2775                 if (i != 0) {
2776                         tty_notice(tty, "SAK: killed process %d (%s): by fd#%d\n",
2777                                    task_pid_nr(p), p->comm, i - 1);
2778                         force_sig(SIGKILL, p);
2779                 }
2780                 task_unlock(p);
2781         } while_each_thread(g, p);
2782         read_unlock(&tasklist_lock);
2783         put_pid(session);
2784 #endif
2785 }
2786
2787 static void do_SAK_work(struct work_struct *work)
2788 {
2789         struct tty_struct *tty =
2790                 container_of(work, struct tty_struct, SAK_work);
2791         __do_SAK(tty);
2792 }
2793
2794 /*
2795  * The tq handling here is a little racy - tty->SAK_work may already be queued.
2796  * Fortunately we don't need to worry, because if ->SAK_work is already queued,
2797  * the values which we write to it will be identical to the values which it
2798  * already has. --akpm
2799  */
2800 void do_SAK(struct tty_struct *tty)
2801 {
2802         if (!tty)
2803                 return;
2804         schedule_work(&tty->SAK_work);
2805 }
2806
2807 EXPORT_SYMBOL(do_SAK);
2808
2809 static int dev_match_devt(struct device *dev, const void *data)
2810 {
2811         const dev_t *devt = data;
2812         return dev->devt == *devt;
2813 }
2814
2815 /* Must put_device() after it's unused! */
2816 static struct device *tty_get_device(struct tty_struct *tty)
2817 {
2818         dev_t devt = tty_devnum(tty);
2819         return class_find_device(tty_class, NULL, &devt, dev_match_devt);
2820 }
2821
2822
2823 /**
2824  *      alloc_tty_struct
2825  *
2826  *      This subroutine allocates and initializes a tty structure.
2827  *
2828  *      Locking: none - tty in question is not exposed at this point
2829  */
2830
2831 struct tty_struct *alloc_tty_struct(struct tty_driver *driver, int idx)
2832 {
2833         struct tty_struct *tty;
2834
2835         tty = kzalloc(sizeof(*tty), GFP_KERNEL);
2836         if (!tty)
2837                 return NULL;
2838
2839         kref_init(&tty->kref);
2840         tty->magic = TTY_MAGIC;
2841         if (tty_ldisc_init(tty)) {
2842                 kfree(tty);
2843                 return NULL;
2844         }
2845         tty->session = NULL;
2846         tty->pgrp = NULL;
2847         mutex_init(&tty->legacy_mutex);
2848         mutex_init(&tty->throttle_mutex);
2849         init_rwsem(&tty->termios_rwsem);
2850         mutex_init(&tty->winsize_mutex);
2851         init_ldsem(&tty->ldisc_sem);
2852         init_waitqueue_head(&tty->write_wait);
2853         init_waitqueue_head(&tty->read_wait);
2854         INIT_WORK(&tty->hangup_work, do_tty_hangup);
2855         mutex_init(&tty->atomic_write_lock);
2856         spin_lock_init(&tty->ctrl_lock);
2857         spin_lock_init(&tty->flow_lock);
2858         spin_lock_init(&tty->files_lock);
2859         INIT_LIST_HEAD(&tty->tty_files);
2860         INIT_WORK(&tty->SAK_work, do_SAK_work);
2861
2862         tty->driver = driver;
2863         tty->ops = driver->ops;
2864         tty->index = idx;
2865         tty_line_name(driver, idx, tty->name);
2866         tty->dev = tty_get_device(tty);
2867
2868         return tty;
2869 }
2870
2871 /**
2872  *      tty_put_char    -       write one character to a tty
2873  *      @tty: tty
2874  *      @ch: character
2875  *
2876  *      Write one byte to the tty using the provided put_char method
2877  *      if present. Returns the number of characters successfully output.
2878  *
2879  *      Note: the specific put_char operation in the driver layer may go
2880  *      away soon. Don't call it directly, use this method
2881  */
2882
2883 int tty_put_char(struct tty_struct *tty, unsigned char ch)
2884 {
2885         if (tty->ops->put_char)
2886                 return tty->ops->put_char(tty, ch);
2887         return tty->ops->write(tty, &ch, 1);
2888 }
2889 EXPORT_SYMBOL_GPL(tty_put_char);
2890
2891 struct class *tty_class;
2892
2893 static int tty_cdev_add(struct tty_driver *driver, dev_t dev,
2894                 unsigned int index, unsigned int count)
2895 {
2896         int err;
2897
2898         /* init here, since reused cdevs cause crashes */
2899         driver->cdevs[index] = cdev_alloc();
2900         if (!driver->cdevs[index])
2901                 return -ENOMEM;
2902         driver->cdevs[index]->ops = &tty_fops;
2903         driver->cdevs[index]->owner = driver->owner;
2904         err = cdev_add(driver->cdevs[index], dev, count);
2905         if (err)
2906                 kobject_put(&driver->cdevs[index]->kobj);
2907         return err;
2908 }
2909
2910 /**
2911  *      tty_register_device - register a tty device
2912  *      @driver: the tty driver that describes the tty device
2913  *      @index: the index in the tty driver for this tty device
2914  *      @device: a struct device that is associated with this tty device.
2915  *              This field is optional, if there is no known struct device
2916  *              for this tty device it can be set to NULL safely.
2917  *
2918  *      Returns a pointer to the struct device for this tty device
2919  *      (or ERR_PTR(-EFOO) on error).
2920  *
2921  *      This call is required to be made to register an individual tty device
2922  *      if the tty driver's flags have the TTY_DRIVER_DYNAMIC_DEV bit set.  If
2923  *      that bit is not set, this function should not be called by a tty
2924  *      driver.
2925  *
2926  *      Locking: ??
2927  */
2928
2929 struct device *tty_register_device(struct tty_driver *driver, unsigned index,
2930                                    struct device *device)
2931 {
2932         return tty_register_device_attr(driver, index, device, NULL, NULL);
2933 }
2934 EXPORT_SYMBOL(tty_register_device);
2935
2936 static void tty_device_create_release(struct device *dev)
2937 {
2938         dev_dbg(dev, "releasing...\n");
2939         kfree(dev);
2940 }
2941
2942 /**
2943  *      tty_register_device_attr - register a tty device
2944  *      @driver: the tty driver that describes the tty device
2945  *      @index: the index in the tty driver for this tty device
2946  *      @device: a struct device that is associated with this tty device.
2947  *              This field is optional, if there is no known struct device
2948  *              for this tty device it can be set to NULL safely.
2949  *      @drvdata: Driver data to be set to device.
2950  *      @attr_grp: Attribute group to be set on device.
2951  *
2952  *      Returns a pointer to the struct device for this tty device
2953  *      (or ERR_PTR(-EFOO) on error).
2954  *
2955  *      This call is required to be made to register an individual tty device
2956  *      if the tty driver's flags have the TTY_DRIVER_DYNAMIC_DEV bit set.  If
2957  *      that bit is not set, this function should not be called by a tty
2958  *      driver.
2959  *
2960  *      Locking: ??
2961  */
2962 struct device *tty_register_device_attr(struct tty_driver *driver,
2963                                    unsigned index, struct device *device,
2964                                    void *drvdata,
2965                                    const struct attribute_group **attr_grp)
2966 {
2967         char name[64];
2968         dev_t devt = MKDEV(driver->major, driver->minor_start) + index;
2969         struct ktermios *tp;
2970         struct device *dev;
2971         int retval;
2972
2973         if (index >= driver->num) {
2974                 pr_err("%s: Attempt to register invalid tty line number (%d)\n",
2975                        driver->name, index);
2976                 return ERR_PTR(-EINVAL);
2977         }
2978
2979         if (driver->type == TTY_DRIVER_TYPE_PTY)
2980                 pty_line_name(driver, index, name);
2981         else
2982                 tty_line_name(driver, index, name);
2983
2984         dev = kzalloc(sizeof(*dev), GFP_KERNEL);
2985         if (!dev)
2986                 return ERR_PTR(-ENOMEM);
2987
2988         dev->devt = devt;
2989         dev->class = tty_class;
2990         dev->parent = device;
2991         dev->release = tty_device_create_release;
2992         dev_set_name(dev, "%s", name);
2993         dev->groups = attr_grp;
2994         dev_set_drvdata(dev, drvdata);
2995
2996         dev_set_uevent_suppress(dev, 1);
2997
2998         retval = device_register(dev);
2999         if (retval)
3000                 goto err_put;
3001
3002         if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3003                 /*
3004                  * Free any saved termios data so that the termios state is
3005                  * reset when reusing a minor number.
3006                  */
3007                 tp = driver->termios[index];
3008                 if (tp) {
3009                         driver->termios[index] = NULL;
3010                         kfree(tp);
3011                 }
3012
3013                 retval = tty_cdev_add(driver, devt, index, 1);
3014                 if (retval)
3015                         goto err_del;
3016         }
3017
3018         dev_set_uevent_suppress(dev, 0);
3019         kobject_uevent(&dev->kobj, KOBJ_ADD);
3020
3021         return dev;
3022
3023 err_del:
3024         device_del(dev);
3025 err_put:
3026         put_device(dev);
3027
3028         return ERR_PTR(retval);
3029 }
3030 EXPORT_SYMBOL_GPL(tty_register_device_attr);
3031
3032 /**
3033  *      tty_unregister_device - unregister a tty device
3034  *      @driver: the tty driver that describes the tty device
3035  *      @index: the index in the tty driver for this tty device
3036  *
3037  *      If a tty device is registered with a call to tty_register_device() then
3038  *      this function must be called when the tty device is gone.
3039  *
3040  *      Locking: ??
3041  */
3042
3043 void tty_unregister_device(struct tty_driver *driver, unsigned index)
3044 {
3045         device_destroy(tty_class,
3046                 MKDEV(driver->major, driver->minor_start) + index);
3047         if (!(driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3048                 cdev_del(driver->cdevs[index]);
3049                 driver->cdevs[index] = NULL;
3050         }
3051 }
3052 EXPORT_SYMBOL(tty_unregister_device);
3053
3054 /**
3055  * __tty_alloc_driver -- allocate tty driver
3056  * @lines: count of lines this driver can handle at most
3057  * @owner: module which is responsible for this driver
3058  * @flags: some of TTY_DRIVER_* flags, will be set in driver->flags
3059  *
3060  * This should not be called directly, some of the provided macros should be
3061  * used instead. Use IS_ERR and friends on @retval.
3062  */
3063 struct tty_driver *__tty_alloc_driver(unsigned int lines, struct module *owner,
3064                 unsigned long flags)
3065 {
3066         struct tty_driver *driver;
3067         unsigned int cdevs = 1;
3068         int err;
3069
3070         if (!lines || (flags & TTY_DRIVER_UNNUMBERED_NODE && lines > 1))
3071                 return ERR_PTR(-EINVAL);
3072
3073         driver = kzalloc(sizeof(struct tty_driver), GFP_KERNEL);
3074         if (!driver)
3075                 return ERR_PTR(-ENOMEM);
3076
3077         kref_init(&driver->kref);
3078         driver->magic = TTY_DRIVER_MAGIC;
3079         driver->num = lines;
3080         driver->owner = owner;
3081         driver->flags = flags;
3082
3083         if (!(flags & TTY_DRIVER_DEVPTS_MEM)) {
3084                 driver->ttys = kcalloc(lines, sizeof(*driver->ttys),
3085                                 GFP_KERNEL);
3086                 driver->termios = kcalloc(lines, sizeof(*driver->termios),
3087                                 GFP_KERNEL);
3088                 if (!driver->ttys || !driver->termios) {
3089                         err = -ENOMEM;
3090                         goto err_free_all;
3091                 }
3092         }
3093
3094         if (!(flags & TTY_DRIVER_DYNAMIC_ALLOC)) {
3095                 driver->ports = kcalloc(lines, sizeof(*driver->ports),
3096                                 GFP_KERNEL);
3097                 if (!driver->ports) {
3098                         err = -ENOMEM;
3099                         goto err_free_all;
3100                 }
3101                 cdevs = lines;
3102         }
3103
3104         driver->cdevs = kcalloc(cdevs, sizeof(*driver->cdevs), GFP_KERNEL);
3105         if (!driver->cdevs) {
3106                 err = -ENOMEM;
3107                 goto err_free_all;
3108         }
3109
3110         return driver;
3111 err_free_all:
3112         kfree(driver->ports);
3113         kfree(driver->ttys);
3114         kfree(driver->termios);
3115         kfree(driver->cdevs);
3116         kfree(driver);
3117         return ERR_PTR(err);
3118 }
3119 EXPORT_SYMBOL(__tty_alloc_driver);
3120
3121 static void destruct_tty_driver(struct kref *kref)
3122 {
3123         struct tty_driver *driver = container_of(kref, struct tty_driver, kref);
3124         int i;
3125         struct ktermios *tp;
3126
3127         if (driver->flags & TTY_DRIVER_INSTALLED) {
3128                 for (i = 0; i < driver->num; i++) {
3129                         tp = driver->termios[i];
3130                         if (tp) {
3131                                 driver->termios[i] = NULL;
3132                                 kfree(tp);
3133                         }
3134                         if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV))
3135                                 tty_unregister_device(driver, i);
3136                 }
3137                 proc_tty_unregister_driver(driver);
3138                 if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC)
3139                         cdev_del(driver->cdevs[0]);
3140         }
3141         kfree(driver->cdevs);
3142         kfree(driver->ports);
3143         kfree(driver->termios);
3144         kfree(driver->ttys);
3145         kfree(driver);
3146 }
3147
3148 void tty_driver_kref_put(struct tty_driver *driver)
3149 {
3150         kref_put(&driver->kref, destruct_tty_driver);
3151 }
3152 EXPORT_SYMBOL(tty_driver_kref_put);
3153
3154 void tty_set_operations(struct tty_driver *driver,
3155                         const struct tty_operations *op)
3156 {
3157         driver->ops = op;
3158 };
3159 EXPORT_SYMBOL(tty_set_operations);
3160
3161 void put_tty_driver(struct tty_driver *d)
3162 {
3163         tty_driver_kref_put(d);
3164 }
3165 EXPORT_SYMBOL(put_tty_driver);
3166
3167 /*
3168  * Called by a tty driver to register itself.
3169  */
3170 int tty_register_driver(struct tty_driver *driver)
3171 {
3172         int error;
3173         int i;
3174         dev_t dev;
3175         struct device *d;
3176
3177         if (!driver->major) {
3178                 error = alloc_chrdev_region(&dev, driver->minor_start,
3179                                                 driver->num, driver->name);
3180                 if (!error) {
3181                         driver->major = MAJOR(dev);
3182                         driver->minor_start = MINOR(dev);
3183                 }
3184         } else {
3185                 dev = MKDEV(driver->major, driver->minor_start);
3186                 error = register_chrdev_region(dev, driver->num, driver->name);
3187         }
3188         if (error < 0)
3189                 goto err;
3190
3191         if (driver->flags & TTY_DRIVER_DYNAMIC_ALLOC) {
3192                 error = tty_cdev_add(driver, dev, 0, driver->num);
3193                 if (error)
3194                         goto err_unreg_char;
3195         }
3196
3197         mutex_lock(&tty_mutex);
3198         list_add(&driver->tty_drivers, &tty_drivers);
3199         mutex_unlock(&tty_mutex);
3200
3201         if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) {
3202                 for (i = 0; i < driver->num; i++) {
3203                         d = tty_register_device(driver, i, NULL);
3204                         if (IS_ERR(d)) {
3205                                 error = PTR_ERR(d);
3206                                 goto err_unreg_devs;
3207                         }
3208                 }
3209         }
3210         proc_tty_register_driver(driver);
3211         driver->flags |= TTY_DRIVER_INSTALLED;
3212         return 0;
3213
3214 err_unreg_devs:
3215         for (i--; i >= 0; i--)
3216                 tty_unregister_device(driver, i);
3217
3218         mutex_lock(&tty_mutex);
3219         list_del(&driver->tty_drivers);
3220         mutex_unlock(&tty_mutex);
3221
3222 err_unreg_char:
3223         unregister_chrdev_region(dev, driver->num);
3224 err:
3225         return error;
3226 }
3227 EXPORT_SYMBOL(tty_register_driver);
3228
3229 /*
3230  * Called by a tty driver to unregister itself.
3231  */
3232 int tty_unregister_driver(struct tty_driver *driver)
3233 {
3234 #if 0
3235         /* FIXME */
3236         if (driver->refcount)
3237                 return -EBUSY;
3238 #endif
3239         unregister_chrdev_region(MKDEV(driver->major, driver->minor_start),
3240                                 driver->num);
3241         mutex_lock(&tty_mutex);
3242         list_del(&driver->tty_drivers);
3243         mutex_unlock(&tty_mutex);
3244         return 0;
3245 }
3246
3247 EXPORT_SYMBOL(tty_unregister_driver);
3248
3249 dev_t tty_devnum(struct tty_struct *tty)
3250 {
3251         return MKDEV(tty->driver->major, tty->driver->minor_start) + tty->index;
3252 }
3253 EXPORT_SYMBOL(tty_devnum);
3254
3255 void tty_default_fops(struct file_operations *fops)
3256 {
3257         *fops = tty_fops;
3258 }
3259
3260 static char *tty_devnode(struct device *dev, umode_t *mode)
3261 {
3262         if (!mode)
3263                 return NULL;
3264         if (dev->devt == MKDEV(TTYAUX_MAJOR, 0) ||
3265             dev->devt == MKDEV(TTYAUX_MAJOR, 2))
3266                 *mode = 0666;
3267         return NULL;
3268 }
3269
3270 static int __init tty_class_init(void)
3271 {
3272         tty_class = class_create(THIS_MODULE, "tty");
3273         if (IS_ERR(tty_class))
3274                 return PTR_ERR(tty_class);
3275         tty_class->devnode = tty_devnode;
3276         return 0;
3277 }
3278
3279 postcore_initcall(tty_class_init);
3280
3281 /* 3/2004 jmc: why do these devices exist? */
3282 static struct cdev tty_cdev, console_cdev;
3283
3284 static ssize_t show_cons_active(struct device *dev,
3285                                 struct device_attribute *attr, char *buf)
3286 {
3287         struct console *cs[16];
3288         int i = 0;
3289         struct console *c;
3290         ssize_t count = 0;
3291
3292         console_lock();
3293         for_each_console(c) {
3294                 if (!c->device)
3295                         continue;
3296                 if (!c->write)
3297                         continue;
3298                 if ((c->flags & CON_ENABLED) == 0)
3299                         continue;
3300                 cs[i++] = c;
3301                 if (i >= ARRAY_SIZE(cs))
3302                         break;
3303         }
3304         while (i--) {
3305                 int index = cs[i]->index;
3306                 struct tty_driver *drv = cs[i]->device(cs[i], &index);
3307
3308                 /* don't resolve tty0 as some programs depend on it */
3309                 if (drv && (cs[i]->index > 0 || drv->major != TTY_MAJOR))
3310                         count += tty_line_name(drv, index, buf + count);
3311                 else
3312                         count += sprintf(buf + count, "%s%d",
3313                                          cs[i]->name, cs[i]->index);
3314
3315                 count += sprintf(buf + count, "%c", i ? ' ':'\n');
3316         }
3317         console_unlock();
3318
3319         return count;
3320 }
3321 static DEVICE_ATTR(active, S_IRUGO, show_cons_active, NULL);
3322
3323 static struct attribute *cons_dev_attrs[] = {
3324         &dev_attr_active.attr,
3325         NULL
3326 };
3327
3328 ATTRIBUTE_GROUPS(cons_dev);
3329
3330 static struct device *consdev;
3331
3332 void console_sysfs_notify(void)
3333 {
3334         if (consdev)
3335                 sysfs_notify(&consdev->kobj, NULL, "active");
3336 }
3337
3338 /*
3339  * Ok, now we can initialize the rest of the tty devices and can count
3340  * on memory allocations, interrupts etc..
3341  */
3342 int __init tty_init(void)
3343 {
3344         tty_sysctl_init();
3345         cdev_init(&tty_cdev, &tty_fops);
3346         if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||
3347             register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)
3348                 panic("Couldn't register /dev/tty driver\n");
3349         device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), NULL, "tty");
3350
3351         cdev_init(&console_cdev, &console_fops);
3352         if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) ||
3353             register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0)
3354                 panic("Couldn't register /dev/console driver\n");
3355         consdev = device_create_with_groups(tty_class, NULL,
3356                                             MKDEV(TTYAUX_MAJOR, 1), NULL,
3357                                             cons_dev_groups, "console");
3358         if (IS_ERR(consdev))
3359                 consdev = NULL;
3360
3361 #ifdef CONFIG_VT
3362         vty_init(&console_fops);
3363 #endif
3364         return 0;
3365 }
3366