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