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