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