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