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