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