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