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