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