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