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