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