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