TTY: serial_core, remove superfluous set_task_state
[linux-2.6-block.git] / drivers / tty / tty_io.c
1 /*
2  *  Copyright (C) 1991, 1992  Linus Torvalds
3  */
4
5 /*
6  * 'tty_io.c' gives an orthogonal feeling to tty's, be they consoles
7  * or rs-channels. It also implements echoing, cooked mode etc.
8  *
9  * Kill-line thanks to John T Kohl, who also corrected VMIN = VTIME = 0.
10  *
11  * Modified by Theodore Ts'o, 9/14/92, to dynamically allocate the
12  * tty_struct and tty_queue structures.  Previously there was an array
13  * of 256 tty_struct's which was statically allocated, and the
14  * tty_queue structures were allocated at boot time.  Both are now
15  * dynamically allocated only when the tty is open.
16  *
17  * Also restructured routines so that there is more of a separation
18  * between the high-level tty routines (tty_io.c and tty_ioctl.c) and
19  * the low-level tty routines (serial.c, pty.c, console.c).  This
20  * makes for cleaner and more compact code.  -TYT, 9/17/92
21  *
22  * Modified by Fred N. van Kempen, 01/29/93, to add line disciplines
23  * which can be dynamically activated and de-activated by the line
24  * discipline handling modules (like SLIP).
25  *
26  * NOTE: pay no attention to the line discipline code (yet); its
27  * interface is still subject to change in this version...
28  * -- TYT, 1/31/92
29  *
30  * Added functionality to the OPOST tty handling.  No delays, but all
31  * other bits should be there.
32  *      -- Nick Holloway <alfie@dcs.warwick.ac.uk>, 27th May 1993.
33  *
34  * Rewrote canonical mode and added more termios flags.
35  *      -- julian@uhunix.uhcc.hawaii.edu (J. Cowley), 13Jan94
36  *
37  * Reorganized FASYNC support so mouse code can share it.
38  *      -- ctm@ardi.com, 9Sep95
39  *
40  * New TIOCLINUX variants added.
41  *      -- mj@k332.feld.cvut.cz, 19-Nov-95
42  *
43  * Restrict vt switching via ioctl()
44  *      -- grif@cs.ucr.edu, 5-Dec-95
45  *
46  * Move console and virtual terminal code to more appropriate files,
47  * implement CONFIG_VT and generalize console device interface.
48  *      -- Marko Kohtala <Marko.Kohtala@hut.fi>, March 97
49  *
50  * Rewrote tty_init_dev and tty_release_dev to eliminate races.
51  *      -- Bill Hawes <whawes@star.net>, June 97
52  *
53  * Added devfs support.
54  *      -- C. Scott Ananian <cananian@alumni.princeton.edu>, 13-Jan-1998
55  *
56  * Added support for a Unix98-style ptmx device.
57  *      -- C. Scott Ananian <cananian@alumni.princeton.edu>, 14-Jan-1998
58  *
59  * Reduced memory usage for older ARM systems
60  *      -- Russell King <rmk@arm.linux.org.uk>
61  *
62  * Move do_SAK() into process context.  Less stack use in devfs functions.
63  * alloc_tty_struct() always uses kmalloc()
64  *                       -- Andrew Morton <andrewm@uow.edu.eu> 17Mar01
65  */
66
67 #include <linux/types.h>
68 #include <linux/major.h>
69 #include <linux/errno.h>
70 #include <linux/signal.h>
71 #include <linux/fcntl.h>
72 #include <linux/sched.h>
73 #include <linux/interrupt.h>
74 #include <linux/tty.h>
75 #include <linux/tty_driver.h>
76 #include <linux/tty_flip.h>
77 #include <linux/devpts_fs.h>
78 #include <linux/file.h>
79 #include <linux/fdtable.h>
80 #include <linux/console.h>
81 #include <linux/timer.h>
82 #include <linux/ctype.h>
83 #include <linux/kd.h>
84 #include <linux/mm.h>
85 #include <linux/string.h>
86 #include <linux/slab.h>
87 #include <linux/poll.h>
88 #include <linux/proc_fs.h>
89 #include <linux/init.h>
90 #include <linux/module.h>
91 #include <linux/device.h>
92 #include <linux/wait.h>
93 #include <linux/bitops.h>
94 #include <linux/delay.h>
95 #include <linux/seq_file.h>
96 #include <linux/serial.h>
97
98 #include <linux/uaccess.h>
99 #include <asm/system.h>
100
101 #include <linux/kbd_kern.h>
102 #include <linux/vt_kern.h>
103 #include <linux/selection.h>
104
105 #include <linux/kmod.h>
106 #include <linux/nsproxy.h>
107
108 #undef TTY_DEBUG_HANGUP
109
110 #define TTY_PARANOIA_CHECK 1
111 #define CHECK_TTY_COUNT 1
112
113 struct ktermios tty_std_termios = {     /* for the benefit of tty drivers  */
114         .c_iflag = ICRNL | IXON,
115         .c_oflag = OPOST | ONLCR,
116         .c_cflag = B38400 | CS8 | CREAD | HUPCL,
117         .c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK |
118                    ECHOCTL | ECHOKE | IEXTEN,
119         .c_cc = INIT_C_CC,
120         .c_ispeed = 38400,
121         .c_ospeed = 38400
122 };
123
124 EXPORT_SYMBOL(tty_std_termios);
125
126 /* This list gets poked at by procfs and various bits of boot up code. This
127    could do with some rationalisation such as pulling the tty proc function
128    into this file */
129
130 LIST_HEAD(tty_drivers);                 /* linked list of tty drivers */
131
132 /* Mutex to protect creating and releasing a tty. This is shared with
133    vt.c for deeply disgusting hack reasons */
134 DEFINE_MUTEX(tty_mutex);
135 EXPORT_SYMBOL(tty_mutex);
136
137 /* Spinlock to protect the tty->tty_files list */
138 DEFINE_SPINLOCK(tty_files_lock);
139
140 static ssize_t tty_read(struct file *, char __user *, size_t, loff_t *);
141 static ssize_t tty_write(struct file *, const char __user *, size_t, loff_t *);
142 ssize_t redirected_tty_write(struct file *, const char __user *,
143                                                         size_t, loff_t *);
144 static unsigned int tty_poll(struct file *, poll_table *);
145 static int tty_open(struct inode *, struct file *);
146 long tty_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
147 #ifdef CONFIG_COMPAT
148 static long tty_compat_ioctl(struct file *file, unsigned int cmd,
149                                 unsigned long arg);
150 #else
151 #define tty_compat_ioctl NULL
152 #endif
153 static int __tty_fasync(int fd, struct file *filp, int on);
154 static int tty_fasync(int fd, struct file *filp, int on);
155 static void release_tty(struct tty_struct *tty, int idx);
156 static void __proc_set_tty(struct task_struct *tsk, struct tty_struct *tty);
157 static void proc_set_tty(struct task_struct *tsk, struct tty_struct *tty);
158
159 /**
160  *      alloc_tty_struct        -       allocate a tty object
161  *
162  *      Return a new empty tty structure. The data fields have not
163  *      been initialized in any way but has been zeroed
164  *
165  *      Locking: none
166  */
167
168 struct tty_struct *alloc_tty_struct(void)
169 {
170         return kzalloc(sizeof(struct tty_struct), GFP_KERNEL);
171 }
172
173 /**
174  *      free_tty_struct         -       free a disused tty
175  *      @tty: tty struct to free
176  *
177  *      Free the write buffers, tty queue and tty memory itself.
178  *
179  *      Locking: none. Must be called after tty is definitely unused
180  */
181
182 void free_tty_struct(struct tty_struct *tty)
183 {
184         if (tty->dev)
185                 put_device(tty->dev);
186         kfree(tty->write_buf);
187         tty_buffer_free_all(tty);
188         kfree(tty);
189 }
190
191 static inline struct tty_struct *file_tty(struct file *file)
192 {
193         return ((struct tty_file_private *)file->private_data)->tty;
194 }
195
196 /* Associate a new file with the tty structure */
197 int tty_add_file(struct tty_struct *tty, struct file *file)
198 {
199         struct tty_file_private *priv;
200
201         priv = kmalloc(sizeof(*priv), GFP_KERNEL);
202         if (!priv)
203                 return -ENOMEM;
204
205         priv->tty = tty;
206         priv->file = file;
207         file->private_data = priv;
208
209         spin_lock(&tty_files_lock);
210         list_add(&priv->list, &tty->tty_files);
211         spin_unlock(&tty_files_lock);
212
213         return 0;
214 }
215
216 /* Delete file from its tty */
217 void tty_del_file(struct file *file)
218 {
219         struct tty_file_private *priv = file->private_data;
220
221         spin_lock(&tty_files_lock);
222         list_del(&priv->list);
223         spin_unlock(&tty_files_lock);
224         file->private_data = NULL;
225         kfree(priv);
226 }
227
228
229 #define TTY_NUMBER(tty) ((tty)->index + (tty)->driver->name_base)
230
231 /**
232  *      tty_name        -       return tty naming
233  *      @tty: tty structure
234  *      @buf: buffer for output
235  *
236  *      Convert a tty structure into a name. The name reflects the kernel
237  *      naming policy and if udev is in use may not reflect user space
238  *
239  *      Locking: none
240  */
241
242 char *tty_name(struct tty_struct *tty, char *buf)
243 {
244         if (!tty) /* Hmm.  NULL pointer.  That's fun. */
245                 strcpy(buf, "NULL tty");
246         else
247                 strcpy(buf, tty->name);
248         return buf;
249 }
250
251 EXPORT_SYMBOL(tty_name);
252
253 int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
254                               const char *routine)
255 {
256 #ifdef TTY_PARANOIA_CHECK
257         if (!tty) {
258                 printk(KERN_WARNING
259                         "null TTY for (%d:%d) in %s\n",
260                         imajor(inode), iminor(inode), routine);
261                 return 1;
262         }
263         if (tty->magic != TTY_MAGIC) {
264                 printk(KERN_WARNING
265                         "bad magic number for tty struct (%d:%d) in %s\n",
266                         imajor(inode), iminor(inode), routine);
267                 return 1;
268         }
269 #endif
270         return 0;
271 }
272
273 static int check_tty_count(struct tty_struct *tty, const char *routine)
274 {
275 #ifdef CHECK_TTY_COUNT
276         struct list_head *p;
277         int count = 0;
278
279         spin_lock(&tty_files_lock);
280         list_for_each(p, &tty->tty_files) {
281                 count++;
282         }
283         spin_unlock(&tty_files_lock);
284         if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
285             tty->driver->subtype == PTY_TYPE_SLAVE &&
286             tty->link && tty->link->count)
287                 count++;
288         if (tty->count != count) {
289                 printk(KERN_WARNING "Warning: dev (%s) tty->count(%d) "
290                                     "!= #fd's(%d) in %s\n",
291                        tty->name, tty->count, count, routine);
292                 return count;
293         }
294 #endif
295         return 0;
296 }
297
298 /**
299  *      get_tty_driver          -       find device of a tty
300  *      @dev_t: device identifier
301  *      @index: returns the index of the tty
302  *
303  *      This routine returns a tty driver structure, given a device number
304  *      and also passes back the index number.
305  *
306  *      Locking: caller must hold tty_mutex
307  */
308
309 static struct tty_driver *get_tty_driver(dev_t device, int *index)
310 {
311         struct tty_driver *p;
312
313         list_for_each_entry(p, &tty_drivers, tty_drivers) {
314                 dev_t base = MKDEV(p->major, p->minor_start);
315                 if (device < base || device >= base + p->num)
316                         continue;
317                 *index = device - base;
318                 return tty_driver_kref_get(p);
319         }
320         return NULL;
321 }
322
323 #ifdef CONFIG_CONSOLE_POLL
324
325 /**
326  *      tty_find_polling_driver -       find device of a polled tty
327  *      @name: name string to match
328  *      @line: pointer to resulting tty line nr
329  *
330  *      This routine returns a tty driver structure, given a name
331  *      and the condition that the tty driver is capable of polled
332  *      operation.
333  */
334 struct tty_driver *tty_find_polling_driver(char *name, int *line)
335 {
336         struct tty_driver *p, *res = NULL;
337         int tty_line = 0;
338         int len;
339         char *str, *stp;
340
341         for (str = name; *str; str++)
342                 if ((*str >= '0' && *str <= '9') || *str == ',')
343                         break;
344         if (!*str)
345                 return NULL;
346
347         len = str - name;
348         tty_line = simple_strtoul(str, &str, 10);
349
350         mutex_lock(&tty_mutex);
351         /* Search through the tty devices to look for a match */
352         list_for_each_entry(p, &tty_drivers, tty_drivers) {
353                 if (strncmp(name, p->name, len) != 0)
354                         continue;
355                 stp = str;
356                 if (*stp == ',')
357                         stp++;
358                 if (*stp == '\0')
359                         stp = NULL;
360
361                 if (tty_line >= 0 && tty_line < p->num && p->ops &&
362                     p->ops->poll_init && !p->ops->poll_init(p, tty_line, stp)) {
363                         res = tty_driver_kref_get(p);
364                         *line = tty_line;
365                         break;
366                 }
367         }
368         mutex_unlock(&tty_mutex);
369
370         return res;
371 }
372 EXPORT_SYMBOL_GPL(tty_find_polling_driver);
373 #endif
374
375 /**
376  *      tty_check_change        -       check for POSIX terminal changes
377  *      @tty: tty to check
378  *
379  *      If we try to write to, or set the state of, a terminal and we're
380  *      not in the foreground, send a SIGTTOU.  If the signal is blocked or
381  *      ignored, go ahead and perform the operation.  (POSIX 7.2)
382  *
383  *      Locking: ctrl_lock
384  */
385
386 int tty_check_change(struct tty_struct *tty)
387 {
388         unsigned long flags;
389         int ret = 0;
390
391         if (current->signal->tty != tty)
392                 return 0;
393
394         spin_lock_irqsave(&tty->ctrl_lock, flags);
395
396         if (!tty->pgrp) {
397                 printk(KERN_WARNING "tty_check_change: tty->pgrp == NULL!\n");
398                 goto out_unlock;
399         }
400         if (task_pgrp(current) == tty->pgrp)
401                 goto out_unlock;
402         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
403         if (is_ignored(SIGTTOU))
404                 goto out;
405         if (is_current_pgrp_orphaned()) {
406                 ret = -EIO;
407                 goto out;
408         }
409         kill_pgrp(task_pgrp(current), SIGTTOU, 1);
410         set_thread_flag(TIF_SIGPENDING);
411         ret = -ERESTARTSYS;
412 out:
413         return ret;
414 out_unlock:
415         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
416         return ret;
417 }
418
419 EXPORT_SYMBOL(tty_check_change);
420
421 static ssize_t hung_up_tty_read(struct file *file, char __user *buf,
422                                 size_t count, loff_t *ppos)
423 {
424         return 0;
425 }
426
427 static ssize_t hung_up_tty_write(struct file *file, const char __user *buf,
428                                  size_t count, loff_t *ppos)
429 {
430         return -EIO;
431 }
432
433 /* No kernel lock held - none needed ;) */
434 static unsigned int hung_up_tty_poll(struct file *filp, poll_table *wait)
435 {
436         return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM;
437 }
438
439 static long hung_up_tty_ioctl(struct file *file, unsigned int cmd,
440                 unsigned long arg)
441 {
442         return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
443 }
444
445 static long hung_up_tty_compat_ioctl(struct file *file,
446                                      unsigned int cmd, unsigned long arg)
447 {
448         return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
449 }
450
451 static const struct file_operations tty_fops = {
452         .llseek         = no_llseek,
453         .read           = tty_read,
454         .write          = tty_write,
455         .poll           = tty_poll,
456         .unlocked_ioctl = tty_ioctl,
457         .compat_ioctl   = tty_compat_ioctl,
458         .open           = tty_open,
459         .release        = tty_release,
460         .fasync         = tty_fasync,
461 };
462
463 static const struct file_operations console_fops = {
464         .llseek         = no_llseek,
465         .read           = tty_read,
466         .write          = redirected_tty_write,
467         .poll           = tty_poll,
468         .unlocked_ioctl = tty_ioctl,
469         .compat_ioctl   = tty_compat_ioctl,
470         .open           = tty_open,
471         .release        = tty_release,
472         .fasync         = tty_fasync,
473 };
474
475 static const struct file_operations hung_up_tty_fops = {
476         .llseek         = no_llseek,
477         .read           = hung_up_tty_read,
478         .write          = hung_up_tty_write,
479         .poll           = hung_up_tty_poll,
480         .unlocked_ioctl = hung_up_tty_ioctl,
481         .compat_ioctl   = hung_up_tty_compat_ioctl,
482         .release        = tty_release,
483 };
484
485 static DEFINE_SPINLOCK(redirect_lock);
486 static struct file *redirect;
487
488 /**
489  *      tty_wakeup      -       request more data
490  *      @tty: terminal
491  *
492  *      Internal and external helper for wakeups of tty. This function
493  *      informs the line discipline if present that the driver is ready
494  *      to receive more output data.
495  */
496
497 void tty_wakeup(struct tty_struct *tty)
498 {
499         struct tty_ldisc *ld;
500
501         if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) {
502                 ld = tty_ldisc_ref(tty);
503                 if (ld) {
504                         if (ld->ops->write_wakeup)
505                                 ld->ops->write_wakeup(tty);
506                         tty_ldisc_deref(ld);
507                 }
508         }
509         wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
510 }
511
512 EXPORT_SYMBOL_GPL(tty_wakeup);
513
514 /**
515  *      __tty_hangup            -       actual handler for hangup events
516  *      @work: tty device
517  *
518  *      This can be called by the "eventd" kernel thread.  That is process
519  *      synchronous but doesn't hold any locks, so we need to make sure we
520  *      have the appropriate locks for what we're doing.
521  *
522  *      The hangup event clears any pending redirections onto the hung up
523  *      device. It ensures future writes will error and it does the needed
524  *      line discipline hangup and signal delivery. The tty object itself
525  *      remains intact.
526  *
527  *      Locking:
528  *              BTM
529  *                redirect lock for undoing redirection
530  *                file list lock for manipulating list of ttys
531  *                tty_ldisc_lock from called functions
532  *                termios_mutex resetting termios data
533  *                tasklist_lock to walk task list for hangup event
534  *                  ->siglock to protect ->signal/->sighand
535  */
536 void __tty_hangup(struct tty_struct *tty)
537 {
538         struct file *cons_filp = NULL;
539         struct file *filp, *f = NULL;
540         struct task_struct *p;
541         struct tty_file_private *priv;
542         int    closecount = 0, n;
543         unsigned long flags;
544         int refs = 0;
545
546         if (!tty)
547                 return;
548
549
550         spin_lock(&redirect_lock);
551         if (redirect && file_tty(redirect) == tty) {
552                 f = redirect;
553                 redirect = NULL;
554         }
555         spin_unlock(&redirect_lock);
556
557         tty_lock();
558
559         /* some functions below drop BTM, so we need this bit */
560         set_bit(TTY_HUPPING, &tty->flags);
561
562         /* inuse_filps is protected by the single tty lock,
563            this really needs to change if we want to flush the
564            workqueue with the lock held */
565         check_tty_count(tty, "tty_hangup");
566
567         spin_lock(&tty_files_lock);
568         /* This breaks for file handles being sent over AF_UNIX sockets ? */
569         list_for_each_entry(priv, &tty->tty_files, list) {
570                 filp = priv->file;
571                 if (filp->f_op->write == redirected_tty_write)
572                         cons_filp = filp;
573                 if (filp->f_op->write != tty_write)
574                         continue;
575                 closecount++;
576                 __tty_fasync(-1, filp, 0);      /* can't block */
577                 filp->f_op = &hung_up_tty_fops;
578         }
579         spin_unlock(&tty_files_lock);
580
581         /*
582          * it drops BTM and thus races with reopen
583          * we protect the race by TTY_HUPPING
584          */
585         tty_ldisc_hangup(tty);
586
587         read_lock(&tasklist_lock);
588         if (tty->session) {
589                 do_each_pid_task(tty->session, PIDTYPE_SID, p) {
590                         spin_lock_irq(&p->sighand->siglock);
591                         if (p->signal->tty == tty) {
592                                 p->signal->tty = NULL;
593                                 /* We defer the dereferences outside fo
594                                    the tasklist lock */
595                                 refs++;
596                         }
597                         if (!p->signal->leader) {
598                                 spin_unlock_irq(&p->sighand->siglock);
599                                 continue;
600                         }
601                         __group_send_sig_info(SIGHUP, SEND_SIG_PRIV, p);
602                         __group_send_sig_info(SIGCONT, SEND_SIG_PRIV, p);
603                         put_pid(p->signal->tty_old_pgrp);  /* A noop */
604                         spin_lock_irqsave(&tty->ctrl_lock, flags);
605                         if (tty->pgrp)
606                                 p->signal->tty_old_pgrp = get_pid(tty->pgrp);
607                         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
608                         spin_unlock_irq(&p->sighand->siglock);
609                 } while_each_pid_task(tty->session, PIDTYPE_SID, p);
610         }
611         read_unlock(&tasklist_lock);
612
613         spin_lock_irqsave(&tty->ctrl_lock, flags);
614         clear_bit(TTY_THROTTLED, &tty->flags);
615         clear_bit(TTY_PUSH, &tty->flags);
616         clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
617         put_pid(tty->session);
618         put_pid(tty->pgrp);
619         tty->session = NULL;
620         tty->pgrp = NULL;
621         tty->ctrl_status = 0;
622         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
623
624         /* Account for the p->signal references we killed */
625         while (refs--)
626                 tty_kref_put(tty);
627
628         /*
629          * If one of the devices matches a console pointer, we
630          * cannot just call hangup() because that will cause
631          * tty->count and state->count to go out of sync.
632          * So we just call close() the right number of times.
633          */
634         if (cons_filp) {
635                 if (tty->ops->close)
636                         for (n = 0; n < closecount; n++)
637                                 tty->ops->close(tty, cons_filp);
638         } else if (tty->ops->hangup)
639                 (tty->ops->hangup)(tty);
640         /*
641          * We don't want to have driver/ldisc interactions beyond
642          * the ones we did here. The driver layer expects no
643          * calls after ->hangup() from the ldisc side. However we
644          * can't yet guarantee all that.
645          */
646         set_bit(TTY_HUPPED, &tty->flags);
647         clear_bit(TTY_HUPPING, &tty->flags);
648         tty_ldisc_enable(tty);
649
650         tty_unlock();
651
652         if (f)
653                 fput(f);
654 }
655
656 static void do_tty_hangup(struct work_struct *work)
657 {
658         struct tty_struct *tty =
659                 container_of(work, struct tty_struct, hangup_work);
660
661         __tty_hangup(tty);
662 }
663
664 /**
665  *      tty_hangup              -       trigger a hangup event
666  *      @tty: tty to hangup
667  *
668  *      A carrier loss (virtual or otherwise) has occurred on this like
669  *      schedule a hangup sequence to run after this event.
670  */
671
672 void tty_hangup(struct tty_struct *tty)
673 {
674 #ifdef TTY_DEBUG_HANGUP
675         char    buf[64];
676         printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf));
677 #endif
678         schedule_work(&tty->hangup_work);
679 }
680
681 EXPORT_SYMBOL(tty_hangup);
682
683 /**
684  *      tty_vhangup             -       process vhangup
685  *      @tty: tty to hangup
686  *
687  *      The user has asked via system call for the terminal to be hung up.
688  *      We do this synchronously so that when the syscall returns the process
689  *      is complete. That guarantee is necessary for security reasons.
690  */
691
692 void tty_vhangup(struct tty_struct *tty)
693 {
694 #ifdef TTY_DEBUG_HANGUP
695         char    buf[64];
696
697         printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf));
698 #endif
699         __tty_hangup(tty);
700 }
701
702 EXPORT_SYMBOL(tty_vhangup);
703
704
705 /**
706  *      tty_vhangup_self        -       process vhangup for own ctty
707  *
708  *      Perform a vhangup on the current controlling tty
709  */
710
711 void tty_vhangup_self(void)
712 {
713         struct tty_struct *tty;
714
715         tty = get_current_tty();
716         if (tty) {
717                 tty_vhangup(tty);
718                 tty_kref_put(tty);
719         }
720 }
721
722 /**
723  *      tty_hung_up_p           -       was tty hung up
724  *      @filp: file pointer of tty
725  *
726  *      Return true if the tty has been subject to a vhangup or a carrier
727  *      loss
728  */
729
730 int tty_hung_up_p(struct file *filp)
731 {
732         return (filp->f_op == &hung_up_tty_fops);
733 }
734
735 EXPORT_SYMBOL(tty_hung_up_p);
736
737 static void session_clear_tty(struct pid *session)
738 {
739         struct task_struct *p;
740         do_each_pid_task(session, PIDTYPE_SID, p) {
741                 proc_clear_tty(p);
742         } while_each_pid_task(session, PIDTYPE_SID, p);
743 }
744
745 /**
746  *      disassociate_ctty       -       disconnect controlling tty
747  *      @on_exit: true if exiting so need to "hang up" the session
748  *
749  *      This function is typically called only by the session leader, when
750  *      it wants to disassociate itself from its controlling tty.
751  *
752  *      It performs the following functions:
753  *      (1)  Sends a SIGHUP and SIGCONT to the foreground process group
754  *      (2)  Clears the tty from being controlling the session
755  *      (3)  Clears the controlling tty for all processes in the
756  *              session group.
757  *
758  *      The argument on_exit is set to 1 if called when a process is
759  *      exiting; it is 0 if called by the ioctl TIOCNOTTY.
760  *
761  *      Locking:
762  *              BTM is taken for hysterical raisins, and held when
763  *                called from no_tty().
764  *                tty_mutex is taken to protect tty
765  *                ->siglock is taken to protect ->signal/->sighand
766  *                tasklist_lock is taken to walk process list for sessions
767  *                  ->siglock is taken to protect ->signal/->sighand
768  */
769
770 void disassociate_ctty(int on_exit)
771 {
772         struct tty_struct *tty;
773         struct pid *tty_pgrp = NULL;
774
775         if (!current->signal->leader)
776                 return;
777
778         tty = get_current_tty();
779         if (tty) {
780                 tty_pgrp = get_pid(tty->pgrp);
781                 if (on_exit) {
782                         if (tty->driver->type != TTY_DRIVER_TYPE_PTY)
783                                 tty_vhangup(tty);
784                 }
785                 tty_kref_put(tty);
786         } else if (on_exit) {
787                 struct pid *old_pgrp;
788                 spin_lock_irq(&current->sighand->siglock);
789                 old_pgrp = current->signal->tty_old_pgrp;
790                 current->signal->tty_old_pgrp = NULL;
791                 spin_unlock_irq(&current->sighand->siglock);
792                 if (old_pgrp) {
793                         kill_pgrp(old_pgrp, SIGHUP, on_exit);
794                         kill_pgrp(old_pgrp, SIGCONT, on_exit);
795                         put_pid(old_pgrp);
796                 }
797                 return;
798         }
799         if (tty_pgrp) {
800                 kill_pgrp(tty_pgrp, SIGHUP, on_exit);
801                 if (!on_exit)
802                         kill_pgrp(tty_pgrp, SIGCONT, on_exit);
803                 put_pid(tty_pgrp);
804         }
805
806         spin_lock_irq(&current->sighand->siglock);
807         put_pid(current->signal->tty_old_pgrp);
808         current->signal->tty_old_pgrp = NULL;
809         spin_unlock_irq(&current->sighand->siglock);
810
811         tty = get_current_tty();
812         if (tty) {
813                 unsigned long flags;
814                 spin_lock_irqsave(&tty->ctrl_lock, flags);
815                 put_pid(tty->session);
816                 put_pid(tty->pgrp);
817                 tty->session = NULL;
818                 tty->pgrp = NULL;
819                 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
820                 tty_kref_put(tty);
821         } else {
822 #ifdef TTY_DEBUG_HANGUP
823                 printk(KERN_DEBUG "error attempted to write to tty [0x%p]"
824                        " = NULL", tty);
825 #endif
826         }
827
828         /* Now clear signal->tty under the lock */
829         read_lock(&tasklist_lock);
830         session_clear_tty(task_session(current));
831         read_unlock(&tasklist_lock);
832 }
833
834 /**
835  *
836  *      no_tty  - Ensure the current process does not have a controlling tty
837  */
838 void no_tty(void)
839 {
840         struct task_struct *tsk = current;
841         tty_lock();
842         disassociate_ctty(0);
843         tty_unlock();
844         proc_clear_tty(tsk);
845 }
846
847
848 /**
849  *      stop_tty        -       propagate flow control
850  *      @tty: tty to stop
851  *
852  *      Perform flow control to the driver. For PTY/TTY pairs we
853  *      must also propagate the TIOCKPKT status. May be called
854  *      on an already stopped device and will not re-call the driver
855  *      method.
856  *
857  *      This functionality is used by both the line disciplines for
858  *      halting incoming flow and by the driver. It may therefore be
859  *      called from any context, may be under the tty atomic_write_lock
860  *      but not always.
861  *
862  *      Locking:
863  *              Uses the tty control lock internally
864  */
865
866 void stop_tty(struct tty_struct *tty)
867 {
868         unsigned long flags;
869         spin_lock_irqsave(&tty->ctrl_lock, flags);
870         if (tty->stopped) {
871                 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
872                 return;
873         }
874         tty->stopped = 1;
875         if (tty->link && tty->link->packet) {
876                 tty->ctrl_status &= ~TIOCPKT_START;
877                 tty->ctrl_status |= TIOCPKT_STOP;
878                 wake_up_interruptible_poll(&tty->link->read_wait, POLLIN);
879         }
880         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
881         if (tty->ops->stop)
882                 (tty->ops->stop)(tty);
883 }
884
885 EXPORT_SYMBOL(stop_tty);
886
887 /**
888  *      start_tty       -       propagate flow control
889  *      @tty: tty to start
890  *
891  *      Start a tty that has been stopped if at all possible. Perform
892  *      any necessary wakeups and propagate the TIOCPKT status. If this
893  *      is the tty was previous stopped and is being started then the
894  *      driver start method is invoked and the line discipline woken.
895  *
896  *      Locking:
897  *              ctrl_lock
898  */
899
900 void start_tty(struct tty_struct *tty)
901 {
902         unsigned long flags;
903         spin_lock_irqsave(&tty->ctrl_lock, flags);
904         if (!tty->stopped || tty->flow_stopped) {
905                 spin_unlock_irqrestore(&tty->ctrl_lock, flags);
906                 return;
907         }
908         tty->stopped = 0;
909         if (tty->link && tty->link->packet) {
910                 tty->ctrl_status &= ~TIOCPKT_STOP;
911                 tty->ctrl_status |= TIOCPKT_START;
912                 wake_up_interruptible_poll(&tty->link->read_wait, POLLIN);
913         }
914         spin_unlock_irqrestore(&tty->ctrl_lock, flags);
915         if (tty->ops->start)
916                 (tty->ops->start)(tty);
917         /* If we have a running line discipline it may need kicking */
918         tty_wakeup(tty);
919 }
920
921 EXPORT_SYMBOL(start_tty);
922
923 /**
924  *      tty_read        -       read method for tty device files
925  *      @file: pointer to tty file
926  *      @buf: user buffer
927  *      @count: size of user buffer
928  *      @ppos: unused
929  *
930  *      Perform the read system call function on this terminal device. Checks
931  *      for hung up devices before calling the line discipline method.
932  *
933  *      Locking:
934  *              Locks the line discipline internally while needed. Multiple
935  *      read calls may be outstanding in parallel.
936  */
937
938 static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
939                         loff_t *ppos)
940 {
941         int i;
942         struct inode *inode = file->f_path.dentry->d_inode;
943         struct tty_struct *tty = file_tty(file);
944         struct tty_ldisc *ld;
945
946         if (tty_paranoia_check(tty, inode, "tty_read"))
947                 return -EIO;
948         if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
949                 return -EIO;
950
951         /* We want to wait for the line discipline to sort out in this
952            situation */
953         ld = tty_ldisc_ref_wait(tty);
954         if (ld->ops->read)
955                 i = (ld->ops->read)(tty, file, buf, count);
956         else
957                 i = -EIO;
958         tty_ldisc_deref(ld);
959         if (i > 0)
960                 inode->i_atime = current_fs_time(inode->i_sb);
961         return i;
962 }
963
964 void tty_write_unlock(struct tty_struct *tty)
965 {
966         mutex_unlock(&tty->atomic_write_lock);
967         wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
968 }
969
970 int tty_write_lock(struct tty_struct *tty, int ndelay)
971 {
972         if (!mutex_trylock(&tty->atomic_write_lock)) {
973                 if (ndelay)
974                         return -EAGAIN;
975                 if (mutex_lock_interruptible(&tty->atomic_write_lock))
976                         return -ERESTARTSYS;
977         }
978         return 0;
979 }
980
981 /*
982  * Split writes up in sane blocksizes to avoid
983  * denial-of-service type attacks
984  */
985 static inline ssize_t do_tty_write(
986         ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t),
987         struct tty_struct *tty,
988         struct file *file,
989         const char __user *buf,
990         size_t count)
991 {
992         ssize_t ret, written = 0;
993         unsigned int chunk;
994
995         ret = tty_write_lock(tty, file->f_flags & O_NDELAY);
996         if (ret < 0)
997                 return ret;
998
999         /*
1000          * We chunk up writes into a temporary buffer. This
1001          * simplifies low-level drivers immensely, since they
1002          * don't have locking issues and user mode accesses.
1003          *
1004          * But if TTY_NO_WRITE_SPLIT is set, we should use a
1005          * big chunk-size..
1006          *
1007          * The default chunk-size is 2kB, because the NTTY
1008          * layer has problems with bigger chunks. It will
1009          * claim to be able to handle more characters than
1010          * it actually does.
1011          *
1012          * FIXME: This can probably go away now except that 64K chunks
1013          * are too likely to fail unless switched to vmalloc...
1014          */
1015         chunk = 2048;
1016         if (test_bit(TTY_NO_WRITE_SPLIT, &tty->flags))
1017                 chunk = 65536;
1018         if (count < chunk)
1019                 chunk = count;
1020
1021         /* write_buf/write_cnt is protected by the atomic_write_lock mutex */
1022         if (tty->write_cnt < chunk) {
1023                 unsigned char *buf_chunk;
1024
1025                 if (chunk < 1024)
1026                         chunk = 1024;
1027
1028                 buf_chunk = kmalloc(chunk, GFP_KERNEL);
1029                 if (!buf_chunk) {
1030                         ret = -ENOMEM;
1031                         goto out;
1032                 }
1033                 kfree(tty->write_buf);
1034                 tty->write_cnt = chunk;
1035                 tty->write_buf = buf_chunk;
1036         }
1037
1038         /* Do the write .. */
1039         for (;;) {
1040                 size_t size = count;
1041                 if (size > chunk)
1042                         size = chunk;
1043                 ret = -EFAULT;
1044                 if (copy_from_user(tty->write_buf, buf, size))
1045                         break;
1046                 ret = write(tty, file, tty->write_buf, size);
1047                 if (ret <= 0)
1048                         break;
1049                 written += ret;
1050                 buf += ret;
1051                 count -= ret;
1052                 if (!count)
1053                         break;
1054                 ret = -ERESTARTSYS;
1055                 if (signal_pending(current))
1056                         break;
1057                 cond_resched();
1058         }
1059         if (written) {
1060                 struct inode *inode = file->f_path.dentry->d_inode;
1061                 inode->i_mtime = current_fs_time(inode->i_sb);
1062                 ret = written;
1063         }
1064 out:
1065         tty_write_unlock(tty);
1066         return ret;
1067 }
1068
1069 /**
1070  * tty_write_message - write a message to a certain tty, not just the console.
1071  * @tty: the destination tty_struct
1072  * @msg: the message to write
1073  *
1074  * This is used for messages that need to be redirected to a specific tty.
1075  * We don't put it into the syslog queue right now maybe in the future if
1076  * really needed.
1077  *
1078  * We must still hold the BTM and test the CLOSING flag for the moment.
1079  */
1080
1081 void tty_write_message(struct tty_struct *tty, char *msg)
1082 {
1083         if (tty) {
1084                 mutex_lock(&tty->atomic_write_lock);
1085                 tty_lock();
1086                 if (tty->ops->write && !test_bit(TTY_CLOSING, &tty->flags)) {
1087                         tty_unlock();
1088                         tty->ops->write(tty, msg, strlen(msg));
1089                 } else
1090                         tty_unlock();
1091                 tty_write_unlock(tty);
1092         }
1093         return;
1094 }
1095
1096
1097 /**
1098  *      tty_write               -       write method for tty device file
1099  *      @file: tty file pointer
1100  *      @buf: user data to write
1101  *      @count: bytes to write
1102  *      @ppos: unused
1103  *
1104  *      Write data to a tty device via the line discipline.
1105  *
1106  *      Locking:
1107  *              Locks the line discipline as required
1108  *              Writes to the tty driver are serialized by the atomic_write_lock
1109  *      and are then processed in chunks to the device. The line discipline
1110  *      write method will not be invoked in parallel for each device.
1111  */
1112
1113 static ssize_t tty_write(struct file *file, const char __user *buf,
1114                                                 size_t count, loff_t *ppos)
1115 {
1116         struct inode *inode = file->f_path.dentry->d_inode;
1117         struct tty_struct *tty = file_tty(file);
1118         struct tty_ldisc *ld;
1119         ssize_t ret;
1120
1121         if (tty_paranoia_check(tty, inode, "tty_write"))
1122                 return -EIO;
1123         if (!tty || !tty->ops->write ||
1124                 (test_bit(TTY_IO_ERROR, &tty->flags)))
1125                         return -EIO;
1126         /* Short term debug to catch buggy drivers */
1127         if (tty->ops->write_room == NULL)
1128                 printk(KERN_ERR "tty driver %s lacks a write_room method.\n",
1129                         tty->driver->name);
1130         ld = tty_ldisc_ref_wait(tty);
1131         if (!ld->ops->write)
1132                 ret = -EIO;
1133         else
1134                 ret = do_tty_write(ld->ops->write, tty, file, buf, count);
1135         tty_ldisc_deref(ld);
1136         return ret;
1137 }
1138
1139 ssize_t redirected_tty_write(struct file *file, const char __user *buf,
1140                                                 size_t count, loff_t *ppos)
1141 {
1142         struct file *p = NULL;
1143
1144         spin_lock(&redirect_lock);
1145         if (redirect) {
1146                 get_file(redirect);
1147                 p = redirect;
1148         }
1149         spin_unlock(&redirect_lock);
1150
1151         if (p) {
1152                 ssize_t res;
1153                 res = vfs_write(p, buf, count, &p->f_pos);
1154                 fput(p);
1155                 return res;
1156         }
1157         return tty_write(file, buf, count, ppos);
1158 }
1159
1160 static char ptychar[] = "pqrstuvwxyzabcde";
1161
1162 /**
1163  *      pty_line_name   -       generate name for a pty
1164  *      @driver: the tty driver in use
1165  *      @index: the minor number
1166  *      @p: output buffer of at least 6 bytes
1167  *
1168  *      Generate a name from a driver reference and write it to the output
1169  *      buffer.
1170  *
1171  *      Locking: None
1172  */
1173 static void pty_line_name(struct tty_driver *driver, int index, char *p)
1174 {
1175         int i = index + driver->name_base;
1176         /* ->name is initialized to "ttyp", but "tty" is expected */
1177         sprintf(p, "%s%c%x",
1178                 driver->subtype == PTY_TYPE_SLAVE ? "tty" : driver->name,
1179                 ptychar[i >> 4 & 0xf], i & 0xf);
1180 }
1181
1182 /**
1183  *      tty_line_name   -       generate name for a tty
1184  *      @driver: the tty driver in use
1185  *      @index: the minor number
1186  *      @p: output buffer of at least 7 bytes
1187  *
1188  *      Generate a name from a driver reference and write it to the output
1189  *      buffer.
1190  *
1191  *      Locking: None
1192  */
1193 static void tty_line_name(struct tty_driver *driver, int index, char *p)
1194 {
1195         sprintf(p, "%s%d", driver->name, index + driver->name_base);
1196 }
1197
1198 /**
1199  *      tty_driver_lookup_tty() - find an existing tty, if any
1200  *      @driver: the driver for the tty
1201  *      @idx:    the minor number
1202  *
1203  *      Return the tty, if found or ERR_PTR() otherwise.
1204  *
1205  *      Locking: tty_mutex must be held. If tty is found, the mutex must
1206  *      be held until the 'fast-open' is also done. Will change once we
1207  *      have refcounting in the driver and per driver locking
1208  */
1209 static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver,
1210                 struct inode *inode, int idx)
1211 {
1212         struct tty_struct *tty;
1213
1214         if (driver->ops->lookup)
1215                 return driver->ops->lookup(driver, inode, idx);
1216
1217         tty = driver->ttys[idx];
1218         return tty;
1219 }
1220
1221 /**
1222  *      tty_init_termios        -  helper for termios setup
1223  *      @tty: the tty to set up
1224  *
1225  *      Initialise the termios structures for this tty. Thus runs under
1226  *      the tty_mutex currently so we can be relaxed about ordering.
1227  */
1228
1229 int tty_init_termios(struct tty_struct *tty)
1230 {
1231         struct ktermios *tp;
1232         int idx = tty->index;
1233
1234         tp = tty->driver->termios[idx];
1235         if (tp == NULL) {
1236                 tp = kzalloc(sizeof(struct ktermios[2]), GFP_KERNEL);
1237                 if (tp == NULL)
1238                         return -ENOMEM;
1239                 memcpy(tp, &tty->driver->init_termios,
1240                                                 sizeof(struct ktermios));
1241                 tty->driver->termios[idx] = tp;
1242         }
1243         tty->termios = tp;
1244         tty->termios_locked = tp + 1;
1245
1246         /* Compatibility until drivers always set this */
1247         tty->termios->c_ispeed = tty_termios_input_baud_rate(tty->termios);
1248         tty->termios->c_ospeed = tty_termios_baud_rate(tty->termios);
1249         return 0;
1250 }
1251 EXPORT_SYMBOL_GPL(tty_init_termios);
1252
1253 /**
1254  *      tty_driver_install_tty() - install a tty entry in the driver
1255  *      @driver: the driver for the tty
1256  *      @tty: the tty
1257  *
1258  *      Install a tty object into the driver tables. The tty->index field
1259  *      will be set by the time this is called. This method is responsible
1260  *      for ensuring any need additional structures are allocated and
1261  *      configured.
1262  *
1263  *      Locking: tty_mutex for now
1264  */
1265 static int tty_driver_install_tty(struct tty_driver *driver,
1266                                                 struct tty_struct *tty)
1267 {
1268         int idx = tty->index;
1269         int ret;
1270
1271         if (driver->ops->install) {
1272                 ret = driver->ops->install(driver, tty);
1273                 return ret;
1274         }
1275
1276         if (tty_init_termios(tty) == 0) {
1277                 tty_driver_kref_get(driver);
1278                 tty->count++;
1279                 driver->ttys[idx] = tty;
1280                 return 0;
1281         }
1282         return -ENOMEM;
1283 }
1284
1285 /**
1286  *      tty_driver_remove_tty() - remove a tty from the driver tables
1287  *      @driver: the driver for the tty
1288  *      @idx:    the minor number
1289  *
1290  *      Remvoe a tty object from the driver tables. The tty->index field
1291  *      will be set by the time this is called.
1292  *
1293  *      Locking: tty_mutex for now
1294  */
1295 static void tty_driver_remove_tty(struct tty_driver *driver,
1296                                                 struct tty_struct *tty)
1297 {
1298         if (driver->ops->remove)
1299                 driver->ops->remove(driver, tty);
1300         else
1301                 driver->ttys[tty->index] = NULL;
1302 }
1303
1304 /*
1305  *      tty_reopen()    - fast re-open of an open tty
1306  *      @tty    - the tty to open
1307  *
1308  *      Return 0 on success, -errno on error.
1309  *
1310  *      Locking: tty_mutex must be held from the time the tty was found
1311  *               till this open completes.
1312  */
1313 static int tty_reopen(struct tty_struct *tty)
1314 {
1315         struct tty_driver *driver = tty->driver;
1316
1317         if (test_bit(TTY_CLOSING, &tty->flags) ||
1318                         test_bit(TTY_HUPPING, &tty->flags) ||
1319                         test_bit(TTY_LDISC_CHANGING, &tty->flags))
1320                 return -EIO;
1321
1322         if (driver->type == TTY_DRIVER_TYPE_PTY &&
1323             driver->subtype == PTY_TYPE_MASTER) {
1324                 /*
1325                  * special case for PTY masters: only one open permitted,
1326                  * and the slave side open count is incremented as well.
1327                  */
1328                 if (tty->count)
1329                         return -EIO;
1330
1331                 tty->link->count++;
1332         }
1333         tty->count++;
1334         tty->driver = driver; /* N.B. why do this every time?? */
1335
1336         mutex_lock(&tty->ldisc_mutex);
1337         WARN_ON(!test_bit(TTY_LDISC, &tty->flags));
1338         mutex_unlock(&tty->ldisc_mutex);
1339
1340         return 0;
1341 }
1342
1343 /**
1344  *      tty_init_dev            -       initialise a tty device
1345  *      @driver: tty driver we are opening a device on
1346  *      @idx: device index
1347  *      @ret_tty: returned tty structure
1348  *      @first_ok: ok to open a new device (used by ptmx)
1349  *
1350  *      Prepare a tty device. This may not be a "new" clean device but
1351  *      could also be an active device. The pty drivers require special
1352  *      handling because of this.
1353  *
1354  *      Locking:
1355  *              The function is called under the tty_mutex, which
1356  *      protects us from the tty struct or driver itself going away.
1357  *
1358  *      On exit the tty device has the line discipline attached and
1359  *      a reference count of 1. If a pair was created for pty/tty use
1360  *      and the other was a pty master then it too has a reference count of 1.
1361  *
1362  * WSH 06/09/97: Rewritten to remove races and properly clean up after a
1363  * failed open.  The new code protects the open with a mutex, so it's
1364  * really quite straightforward.  The mutex locking can probably be
1365  * relaxed for the (most common) case of reopening a tty.
1366  */
1367
1368 struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx,
1369                                                                 int first_ok)
1370 {
1371         struct tty_struct *tty;
1372         int retval;
1373
1374         /* Check if pty master is being opened multiple times */
1375         if (driver->subtype == PTY_TYPE_MASTER &&
1376                 (driver->flags & TTY_DRIVER_DEVPTS_MEM) && !first_ok) {
1377                 return ERR_PTR(-EIO);
1378         }
1379
1380         /*
1381          * First time open is complex, especially for PTY devices.
1382          * This code guarantees that either everything succeeds and the
1383          * TTY is ready for operation, or else the table slots are vacated
1384          * and the allocated memory released.  (Except that the termios
1385          * and locked termios may be retained.)
1386          */
1387
1388         if (!try_module_get(driver->owner))
1389                 return ERR_PTR(-ENODEV);
1390
1391         tty = alloc_tty_struct();
1392         if (!tty) {
1393                 retval = -ENOMEM;
1394                 goto err_module_put;
1395         }
1396         initialize_tty_struct(tty, driver, idx);
1397
1398         retval = tty_driver_install_tty(driver, tty);
1399         if (retval < 0)
1400                 goto err_deinit_tty;
1401
1402         /*
1403          * Structures all installed ... call the ldisc open routines.
1404          * If we fail here just call release_tty to clean up.  No need
1405          * to decrement the use counts, as release_tty doesn't care.
1406          */
1407         retval = tty_ldisc_setup(tty, tty->link);
1408         if (retval)
1409                 goto err_release_tty;
1410         return tty;
1411
1412 err_deinit_tty:
1413         deinitialize_tty_struct(tty);
1414         free_tty_struct(tty);
1415 err_module_put:
1416         module_put(driver->owner);
1417         return ERR_PTR(retval);
1418
1419         /* call the tty release_tty routine to clean out this slot */
1420 err_release_tty:
1421         if (printk_ratelimit())
1422                 printk(KERN_INFO "tty_init_dev: ldisc open failed, "
1423                                  "clearing slot %d\n", idx);
1424         release_tty(tty, idx);
1425         return ERR_PTR(retval);
1426 }
1427
1428 void tty_free_termios(struct tty_struct *tty)
1429 {
1430         struct ktermios *tp;
1431         int idx = tty->index;
1432         /* Kill this flag and push into drivers for locking etc */
1433         if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) {
1434                 /* FIXME: Locking on ->termios array */
1435                 tp = tty->termios;
1436                 tty->driver->termios[idx] = NULL;
1437                 kfree(tp);
1438         }
1439 }
1440 EXPORT_SYMBOL(tty_free_termios);
1441
1442 void tty_shutdown(struct tty_struct *tty)
1443 {
1444         tty_driver_remove_tty(tty->driver, tty);
1445         tty_free_termios(tty);
1446 }
1447 EXPORT_SYMBOL(tty_shutdown);
1448
1449 /**
1450  *      release_one_tty         -       release tty structure memory
1451  *      @kref: kref of tty we are obliterating
1452  *
1453  *      Releases memory associated with a tty structure, and clears out the
1454  *      driver table slots. This function is called when a device is no longer
1455  *      in use. It also gets called when setup of a device fails.
1456  *
1457  *      Locking:
1458  *              tty_mutex - sometimes only
1459  *              takes the file list lock internally when working on the list
1460  *      of ttys that the driver keeps.
1461  *
1462  *      This method gets called from a work queue so that the driver private
1463  *      cleanup ops can sleep (needed for USB at least)
1464  */
1465 static void release_one_tty(struct work_struct *work)
1466 {
1467         struct tty_struct *tty =
1468                 container_of(work, struct tty_struct, hangup_work);
1469         struct tty_driver *driver = tty->driver;
1470
1471         if (tty->ops->cleanup)
1472                 tty->ops->cleanup(tty);
1473
1474         tty->magic = 0;
1475         tty_driver_kref_put(driver);
1476         module_put(driver->owner);
1477
1478         spin_lock(&tty_files_lock);
1479         list_del_init(&tty->tty_files);
1480         spin_unlock(&tty_files_lock);
1481
1482         put_pid(tty->pgrp);
1483         put_pid(tty->session);
1484         free_tty_struct(tty);
1485 }
1486
1487 static void queue_release_one_tty(struct kref *kref)
1488 {
1489         struct tty_struct *tty = container_of(kref, struct tty_struct, kref);
1490
1491         if (tty->ops->shutdown)
1492                 tty->ops->shutdown(tty);
1493         else
1494                 tty_shutdown(tty);
1495
1496         /* The hangup queue is now free so we can reuse it rather than
1497            waste a chunk of memory for each port */
1498         INIT_WORK(&tty->hangup_work, release_one_tty);
1499         schedule_work(&tty->hangup_work);
1500 }
1501
1502 /**
1503  *      tty_kref_put            -       release a tty kref
1504  *      @tty: tty device
1505  *
1506  *      Release a reference to a tty device and if need be let the kref
1507  *      layer destruct the object for us
1508  */
1509
1510 void tty_kref_put(struct tty_struct *tty)
1511 {
1512         if (tty)
1513                 kref_put(&tty->kref, queue_release_one_tty);
1514 }
1515 EXPORT_SYMBOL(tty_kref_put);
1516
1517 /**
1518  *      release_tty             -       release tty structure memory
1519  *
1520  *      Release both @tty and a possible linked partner (think pty pair),
1521  *      and decrement the refcount of the backing module.
1522  *
1523  *      Locking:
1524  *              tty_mutex - sometimes only
1525  *              takes the file list lock internally when working on the list
1526  *      of ttys that the driver keeps.
1527  *              FIXME: should we require tty_mutex is held here ??
1528  *
1529  */
1530 static void release_tty(struct tty_struct *tty, int idx)
1531 {
1532         /* This should always be true but check for the moment */
1533         WARN_ON(tty->index != idx);
1534
1535         if (tty->link)
1536                 tty_kref_put(tty->link);
1537         tty_kref_put(tty);
1538 }
1539
1540 /**
1541  *      tty_release             -       vfs callback for close
1542  *      @inode: inode of tty
1543  *      @filp: file pointer for handle to tty
1544  *
1545  *      Called the last time each file handle is closed that references
1546  *      this tty. There may however be several such references.
1547  *
1548  *      Locking:
1549  *              Takes bkl. See tty_release_dev
1550  *
1551  * Even releasing the tty structures is a tricky business.. We have
1552  * to be very careful that the structures are all released at the
1553  * same time, as interrupts might otherwise get the wrong pointers.
1554  *
1555  * WSH 09/09/97: rewritten to avoid some nasty race conditions that could
1556  * lead to double frees or releasing memory still in use.
1557  */
1558
1559 int tty_release(struct inode *inode, struct file *filp)
1560 {
1561         struct tty_struct *tty = file_tty(filp);
1562         struct tty_struct *o_tty;
1563         int     pty_master, tty_closing, o_tty_closing, do_sleep;
1564         int     devpts;
1565         int     idx;
1566         char    buf[64];
1567
1568         if (tty_paranoia_check(tty, inode, "tty_release_dev"))
1569                 return 0;
1570
1571         tty_lock();
1572         check_tty_count(tty, "tty_release_dev");
1573
1574         __tty_fasync(-1, filp, 0);
1575
1576         idx = tty->index;
1577         pty_master = (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
1578                       tty->driver->subtype == PTY_TYPE_MASTER);
1579         devpts = (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM) != 0;
1580         o_tty = tty->link;
1581
1582 #ifdef TTY_PARANOIA_CHECK
1583         if (idx < 0 || idx >= tty->driver->num) {
1584                 printk(KERN_DEBUG "tty_release_dev: bad idx when trying to "
1585                                   "free (%s)\n", tty->name);
1586                 tty_unlock();
1587                 return 0;
1588         }
1589         if (!devpts) {
1590                 if (tty != tty->driver->ttys[idx]) {
1591                         tty_unlock();
1592                         printk(KERN_DEBUG "tty_release_dev: driver.table[%d] not tty "
1593                                "for (%s)\n", idx, tty->name);
1594                         return 0;
1595                 }
1596                 if (tty->termios != tty->driver->termios[idx]) {
1597                         tty_unlock();
1598                         printk(KERN_DEBUG "tty_release_dev: driver.termios[%d] not termios "
1599                                "for (%s)\n",
1600                                idx, tty->name);
1601                         return 0;
1602                 }
1603         }
1604 #endif
1605
1606 #ifdef TTY_DEBUG_HANGUP
1607         printk(KERN_DEBUG "tty_release_dev of %s (tty count=%d)...",
1608                tty_name(tty, buf), tty->count);
1609 #endif
1610
1611 #ifdef TTY_PARANOIA_CHECK
1612         if (tty->driver->other &&
1613              !(tty->driver->flags & TTY_DRIVER_DEVPTS_MEM)) {
1614                 if (o_tty != tty->driver->other->ttys[idx]) {
1615                         tty_unlock();
1616                         printk(KERN_DEBUG "tty_release_dev: other->table[%d] "
1617                                           "not o_tty for (%s)\n",
1618                                idx, tty->name);
1619                         return 0 ;
1620                 }
1621                 if (o_tty->termios != tty->driver->other->termios[idx]) {
1622                         tty_unlock();
1623                         printk(KERN_DEBUG "tty_release_dev: other->termios[%d] "
1624                                           "not o_termios for (%s)\n",
1625                                idx, tty->name);
1626                         return 0;
1627                 }
1628                 if (o_tty->link != tty) {
1629                         tty_unlock();
1630                         printk(KERN_DEBUG "tty_release_dev: bad pty pointers\n");
1631                         return 0;
1632                 }
1633         }
1634 #endif
1635         if (tty->ops->close)
1636                 tty->ops->close(tty, filp);
1637
1638         tty_unlock();
1639         /*
1640          * Sanity check: if tty->count is going to zero, there shouldn't be
1641          * any waiters on tty->read_wait or tty->write_wait.  We test the
1642          * wait queues and kick everyone out _before_ actually starting to
1643          * close.  This ensures that we won't block while releasing the tty
1644          * structure.
1645          *
1646          * The test for the o_tty closing is necessary, since the master and
1647          * slave sides may close in any order.  If the slave side closes out
1648          * first, its count will be one, since the master side holds an open.
1649          * Thus this test wouldn't be triggered at the time the slave closes,
1650          * so we do it now.
1651          *
1652          * Note that it's possible for the tty to be opened again while we're
1653          * flushing out waiters.  By recalculating the closing flags before
1654          * each iteration we avoid any problems.
1655          */
1656         while (1) {
1657                 /* Guard against races with tty->count changes elsewhere and
1658                    opens on /dev/tty */
1659
1660                 mutex_lock(&tty_mutex);
1661                 tty_lock();
1662                 tty_closing = tty->count <= 1;
1663                 o_tty_closing = o_tty &&
1664                         (o_tty->count <= (pty_master ? 1 : 0));
1665                 do_sleep = 0;
1666
1667                 if (tty_closing) {
1668                         if (waitqueue_active(&tty->read_wait)) {
1669                                 wake_up_poll(&tty->read_wait, POLLIN);
1670                                 do_sleep++;
1671                         }
1672                         if (waitqueue_active(&tty->write_wait)) {
1673                                 wake_up_poll(&tty->write_wait, POLLOUT);
1674                                 do_sleep++;
1675                         }
1676                 }
1677                 if (o_tty_closing) {
1678                         if (waitqueue_active(&o_tty->read_wait)) {
1679                                 wake_up_poll(&o_tty->read_wait, POLLIN);
1680                                 do_sleep++;
1681                         }
1682                         if (waitqueue_active(&o_tty->write_wait)) {
1683                                 wake_up_poll(&o_tty->write_wait, POLLOUT);
1684                                 do_sleep++;
1685                         }
1686                 }
1687                 if (!do_sleep)
1688                         break;
1689
1690                 printk(KERN_WARNING "tty_release_dev: %s: read/write wait queue "
1691                                     "active!\n", tty_name(tty, buf));
1692                 tty_unlock();
1693                 mutex_unlock(&tty_mutex);
1694                 schedule();
1695         }
1696
1697         /*
1698          * The closing flags are now consistent with the open counts on
1699          * both sides, and we've completed the last operation that could
1700          * block, so it's safe to proceed with closing.
1701          */
1702         if (pty_master) {
1703                 if (--o_tty->count < 0) {
1704                         printk(KERN_WARNING "tty_release_dev: bad pty slave count "
1705                                             "(%d) for %s\n",
1706                                o_tty->count, tty_name(o_tty, buf));
1707                         o_tty->count = 0;
1708                 }
1709         }
1710         if (--tty->count < 0) {
1711                 printk(KERN_WARNING "tty_release_dev: bad tty->count (%d) for %s\n",
1712                        tty->count, tty_name(tty, buf));
1713                 tty->count = 0;
1714         }
1715
1716         /*
1717          * We've decremented tty->count, so we need to remove this file
1718          * descriptor off the tty->tty_files list; this serves two
1719          * purposes:
1720          *  - check_tty_count sees the correct number of file descriptors
1721          *    associated with this tty.
1722          *  - do_tty_hangup no longer sees this file descriptor as
1723          *    something that needs to be handled for hangups.
1724          */
1725         tty_del_file(filp);
1726
1727         /*
1728          * Perform some housekeeping before deciding whether to return.
1729          *
1730          * Set the TTY_CLOSING flag if this was the last open.  In the
1731          * case of a pty we may have to wait around for the other side
1732          * to close, and TTY_CLOSING makes sure we can't be reopened.
1733          */
1734         if (tty_closing)
1735                 set_bit(TTY_CLOSING, &tty->flags);
1736         if (o_tty_closing)
1737                 set_bit(TTY_CLOSING, &o_tty->flags);
1738
1739         /*
1740          * If _either_ side is closing, make sure there aren't any
1741          * processes that still think tty or o_tty is their controlling
1742          * tty.
1743          */
1744         if (tty_closing || o_tty_closing) {
1745                 read_lock(&tasklist_lock);
1746                 session_clear_tty(tty->session);
1747                 if (o_tty)
1748                         session_clear_tty(o_tty->session);
1749                 read_unlock(&tasklist_lock);
1750         }
1751
1752         mutex_unlock(&tty_mutex);
1753
1754         /* check whether both sides are closing ... */
1755         if (!tty_closing || (o_tty && !o_tty_closing)) {
1756                 tty_unlock();
1757                 return 0;
1758         }
1759
1760 #ifdef TTY_DEBUG_HANGUP
1761         printk(KERN_DEBUG "freeing tty structure...");
1762 #endif
1763         /*
1764          * Ask the line discipline code to release its structures
1765          */
1766         tty_ldisc_release(tty, o_tty);
1767         /*
1768          * The release_tty function takes care of the details of clearing
1769          * the slots and preserving the termios structure.
1770          */
1771         release_tty(tty, idx);
1772
1773         /* Make this pty number available for reallocation */
1774         if (devpts)
1775                 devpts_kill_index(inode, idx);
1776         tty_unlock();
1777         return 0;
1778 }
1779
1780 /**
1781  *      tty_open                -       open a tty device
1782  *      @inode: inode of device file
1783  *      @filp: file pointer to tty
1784  *
1785  *      tty_open and tty_release keep up the tty count that contains the
1786  *      number of opens done on a tty. We cannot use the inode-count, as
1787  *      different inodes might point to the same tty.
1788  *
1789  *      Open-counting is needed for pty masters, as well as for keeping
1790  *      track of serial lines: DTR is dropped when the last close happens.
1791  *      (This is not done solely through tty->count, now.  - Ted 1/27/92)
1792  *
1793  *      The termios state of a pty is reset on first open so that
1794  *      settings don't persist across reuse.
1795  *
1796  *      Locking: tty_mutex protects tty, get_tty_driver and tty_init_dev work.
1797  *               tty->count should protect the rest.
1798  *               ->siglock protects ->signal/->sighand
1799  */
1800
1801 static int tty_open(struct inode *inode, struct file *filp)
1802 {
1803         struct tty_struct *tty = NULL;
1804         int noctty, retval;
1805         struct tty_driver *driver;
1806         int index;
1807         dev_t device = inode->i_rdev;
1808         unsigned saved_flags = filp->f_flags;
1809
1810         nonseekable_open(inode, filp);
1811
1812 retry_open:
1813         noctty = filp->f_flags & O_NOCTTY;
1814         index  = -1;
1815         retval = 0;
1816
1817         mutex_lock(&tty_mutex);
1818         tty_lock();
1819
1820         if (device == MKDEV(TTYAUX_MAJOR, 0)) {
1821                 tty = get_current_tty();
1822                 if (!tty) {
1823                         tty_unlock();
1824                         mutex_unlock(&tty_mutex);
1825                         return -ENXIO;
1826                 }
1827                 driver = tty_driver_kref_get(tty->driver);
1828                 index = tty->index;
1829                 filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */
1830                 /* noctty = 1; */
1831                 /* FIXME: Should we take a driver reference ? */
1832                 tty_kref_put(tty);
1833                 goto got_driver;
1834         }
1835 #ifdef CONFIG_VT
1836         if (device == MKDEV(TTY_MAJOR, 0)) {
1837                 extern struct tty_driver *console_driver;
1838                 driver = tty_driver_kref_get(console_driver);
1839                 index = fg_console;
1840                 noctty = 1;
1841                 goto got_driver;
1842         }
1843 #endif
1844         if (device == MKDEV(TTYAUX_MAJOR, 1)) {
1845                 struct tty_driver *console_driver = console_device(&index);
1846                 if (console_driver) {
1847                         driver = tty_driver_kref_get(console_driver);
1848                         if (driver) {
1849                                 /* Don't let /dev/console block */
1850                                 filp->f_flags |= O_NONBLOCK;
1851                                 noctty = 1;
1852                                 goto got_driver;
1853                         }
1854                 }
1855                 tty_unlock();
1856                 mutex_unlock(&tty_mutex);
1857                 return -ENODEV;
1858         }
1859
1860         driver = get_tty_driver(device, &index);
1861         if (!driver) {
1862                 tty_unlock();
1863                 mutex_unlock(&tty_mutex);
1864                 return -ENODEV;
1865         }
1866 got_driver:
1867         if (!tty) {
1868                 /* check whether we're reopening an existing tty */
1869                 tty = tty_driver_lookup_tty(driver, inode, index);
1870
1871                 if (IS_ERR(tty)) {
1872                         tty_unlock();
1873                         mutex_unlock(&tty_mutex);
1874                         return PTR_ERR(tty);
1875                 }
1876         }
1877
1878         if (tty) {
1879                 retval = tty_reopen(tty);
1880                 if (retval)
1881                         tty = ERR_PTR(retval);
1882         } else
1883                 tty = tty_init_dev(driver, index, 0);
1884
1885         mutex_unlock(&tty_mutex);
1886         tty_driver_kref_put(driver);
1887         if (IS_ERR(tty)) {
1888                 tty_unlock();
1889                 return PTR_ERR(tty);
1890         }
1891
1892         retval = tty_add_file(tty, filp);
1893         if (retval) {
1894                 tty_unlock();
1895                 tty_release(inode, filp);
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