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