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