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