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