1 // SPDX-License-Identifier: GPL-2.0 2 #include <linux/types.h> 3 #include <linux/errno.h> 4 #include <linux/kmod.h> 5 #include <linux/sched.h> 6 #include <linux/interrupt.h> 7 #include <linux/tty.h> 8 #include <linux/tty_driver.h> 9 #include <linux/file.h> 10 #include <linux/mm.h> 11 #include <linux/string.h> 12 #include <linux/slab.h> 13 #include <linux/poll.h> 14 #include <linux/proc_fs.h> 15 #include <linux/module.h> 16 #include <linux/device.h> 17 #include <linux/wait.h> 18 #include <linux/bitops.h> 19 #include <linux/seq_file.h> 20 #include <linux/uaccess.h> 21 #include <linux/ratelimit.h> 22 #include "tty.h" 23 24 #undef LDISC_DEBUG_HANGUP 25 26 #ifdef LDISC_DEBUG_HANGUP 27 #define tty_ldisc_debug(tty, f, args...) tty_debug(tty, f, ##args) 28 #else 29 #define tty_ldisc_debug(tty, f, args...) 30 #endif 31 32 /* lockdep nested classes for tty->ldisc_sem */ 33 enum { 34 LDISC_SEM_NORMAL, 35 LDISC_SEM_OTHER, 36 }; 37 38 39 /* 40 * This guards the refcounted line discipline lists. The lock 41 * must be taken with irqs off because there are hangup path 42 * callers who will do ldisc lookups and cannot sleep. 43 */ 44 45 static DEFINE_RAW_SPINLOCK(tty_ldiscs_lock); 46 /* Line disc dispatch table */ 47 static struct tty_ldisc_ops *tty_ldiscs[NR_LDISCS]; 48 49 /** 50 * tty_register_ldisc - install a line discipline 51 * @disc: ldisc number 52 * @new_ldisc: pointer to the ldisc object 53 * 54 * Installs a new line discipline into the kernel. The discipline 55 * is set up as unreferenced and then made available to the kernel 56 * from this point onwards. 57 * 58 * Locking: 59 * takes tty_ldiscs_lock to guard against ldisc races 60 */ 61 62 int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc) 63 { 64 unsigned long flags; 65 int ret = 0; 66 67 if (disc < N_TTY || disc >= NR_LDISCS) 68 return -EINVAL; 69 70 raw_spin_lock_irqsave(&tty_ldiscs_lock, flags); 71 tty_ldiscs[disc] = new_ldisc; 72 new_ldisc->num = disc; 73 new_ldisc->refcount = 0; 74 raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags); 75 76 return ret; 77 } 78 EXPORT_SYMBOL(tty_register_ldisc); 79 80 /** 81 * tty_unregister_ldisc - unload a line discipline 82 * @disc: ldisc number 83 * 84 * Remove a line discipline from the kernel providing it is not 85 * currently in use. 86 * 87 * Locking: 88 * takes tty_ldiscs_lock to guard against ldisc races 89 */ 90 91 int tty_unregister_ldisc(int disc) 92 { 93 unsigned long flags; 94 int ret = 0; 95 96 if (disc < N_TTY || disc >= NR_LDISCS) 97 return -EINVAL; 98 99 raw_spin_lock_irqsave(&tty_ldiscs_lock, flags); 100 if (tty_ldiscs[disc]->refcount) 101 ret = -EBUSY; 102 else 103 tty_ldiscs[disc] = NULL; 104 raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags); 105 106 return ret; 107 } 108 EXPORT_SYMBOL(tty_unregister_ldisc); 109 110 static struct tty_ldisc_ops *get_ldops(int disc) 111 { 112 unsigned long flags; 113 struct tty_ldisc_ops *ldops, *ret; 114 115 raw_spin_lock_irqsave(&tty_ldiscs_lock, flags); 116 ret = ERR_PTR(-EINVAL); 117 ldops = tty_ldiscs[disc]; 118 if (ldops) { 119 ret = ERR_PTR(-EAGAIN); 120 if (try_module_get(ldops->owner)) { 121 ldops->refcount++; 122 ret = ldops; 123 } 124 } 125 raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags); 126 return ret; 127 } 128 129 static void put_ldops(struct tty_ldisc_ops *ldops) 130 { 131 unsigned long flags; 132 133 raw_spin_lock_irqsave(&tty_ldiscs_lock, flags); 134 ldops->refcount--; 135 module_put(ldops->owner); 136 raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags); 137 } 138 139 static int tty_ldisc_autoload = IS_BUILTIN(CONFIG_LDISC_AUTOLOAD); 140 /** 141 * tty_ldisc_get - take a reference to an ldisc 142 * @tty: tty device 143 * @disc: ldisc number 144 * 145 * Takes a reference to a line discipline. Deals with refcounts and 146 * module locking counts. 147 * 148 * Returns: -EINVAL if the discipline index is not [N_TTY..NR_LDISCS] or 149 * if the discipline is not registered 150 * -EAGAIN if request_module() failed to load or register the 151 * discipline 152 * -ENOMEM if allocation failure 153 * 154 * Otherwise, returns a pointer to the discipline and bumps the 155 * ref count 156 * 157 * Locking: 158 * takes tty_ldiscs_lock to guard against ldisc races 159 */ 160 161 static struct tty_ldisc *tty_ldisc_get(struct tty_struct *tty, int disc) 162 { 163 struct tty_ldisc *ld; 164 struct tty_ldisc_ops *ldops; 165 166 if (disc < N_TTY || disc >= NR_LDISCS) 167 return ERR_PTR(-EINVAL); 168 169 /* 170 * Get the ldisc ops - we may need to request them to be loaded 171 * dynamically and try again. 172 */ 173 ldops = get_ldops(disc); 174 if (IS_ERR(ldops)) { 175 if (!capable(CAP_SYS_MODULE) && !tty_ldisc_autoload) 176 return ERR_PTR(-EPERM); 177 request_module("tty-ldisc-%d", disc); 178 ldops = get_ldops(disc); 179 if (IS_ERR(ldops)) 180 return ERR_CAST(ldops); 181 } 182 183 /* 184 * There is no way to handle allocation failure of only 16 bytes. 185 * Let's simplify error handling and save more memory. 186 */ 187 ld = kmalloc(sizeof(struct tty_ldisc), GFP_KERNEL | __GFP_NOFAIL); 188 ld->ops = ldops; 189 ld->tty = tty; 190 191 return ld; 192 } 193 194 /* 195 * tty_ldisc_put - release the ldisc 196 * 197 * Complement of tty_ldisc_get(). 198 */ 199 static void tty_ldisc_put(struct tty_ldisc *ld) 200 { 201 if (WARN_ON_ONCE(!ld)) 202 return; 203 204 put_ldops(ld->ops); 205 kfree(ld); 206 } 207 208 static void *tty_ldiscs_seq_start(struct seq_file *m, loff_t *pos) 209 { 210 return (*pos < NR_LDISCS) ? pos : NULL; 211 } 212 213 static void *tty_ldiscs_seq_next(struct seq_file *m, void *v, loff_t *pos) 214 { 215 (*pos)++; 216 return (*pos < NR_LDISCS) ? pos : NULL; 217 } 218 219 static void tty_ldiscs_seq_stop(struct seq_file *m, void *v) 220 { 221 } 222 223 static int tty_ldiscs_seq_show(struct seq_file *m, void *v) 224 { 225 int i = *(loff_t *)v; 226 struct tty_ldisc_ops *ldops; 227 228 ldops = get_ldops(i); 229 if (IS_ERR(ldops)) 230 return 0; 231 seq_printf(m, "%-10s %2d\n", ldops->name ? ldops->name : "???", i); 232 put_ldops(ldops); 233 return 0; 234 } 235 236 const struct seq_operations tty_ldiscs_seq_ops = { 237 .start = tty_ldiscs_seq_start, 238 .next = tty_ldiscs_seq_next, 239 .stop = tty_ldiscs_seq_stop, 240 .show = tty_ldiscs_seq_show, 241 }; 242 243 /** 244 * tty_ldisc_ref_wait - wait for the tty ldisc 245 * @tty: tty device 246 * 247 * Dereference the line discipline for the terminal and take a 248 * reference to it. If the line discipline is in flux then 249 * wait patiently until it changes. 250 * 251 * Returns: NULL if the tty has been hungup and not re-opened with 252 * a new file descriptor, otherwise valid ldisc reference 253 * 254 * Note 1: Must not be called from an IRQ/timer context. The caller 255 * must also be careful not to hold other locks that will deadlock 256 * against a discipline change, such as an existing ldisc reference 257 * (which we check for) 258 * 259 * Note 2: a file_operations routine (read/poll/write) should use this 260 * function to wait for any ldisc lifetime events to finish. 261 */ 262 263 struct tty_ldisc *tty_ldisc_ref_wait(struct tty_struct *tty) 264 { 265 struct tty_ldisc *ld; 266 267 ldsem_down_read(&tty->ldisc_sem, MAX_SCHEDULE_TIMEOUT); 268 ld = tty->ldisc; 269 if (!ld) 270 ldsem_up_read(&tty->ldisc_sem); 271 return ld; 272 } 273 EXPORT_SYMBOL_GPL(tty_ldisc_ref_wait); 274 275 /** 276 * tty_ldisc_ref - get the tty ldisc 277 * @tty: tty device 278 * 279 * Dereference the line discipline for the terminal and take a 280 * reference to it. If the line discipline is in flux then 281 * return NULL. Can be called from IRQ and timer functions. 282 */ 283 284 struct tty_ldisc *tty_ldisc_ref(struct tty_struct *tty) 285 { 286 struct tty_ldisc *ld = NULL; 287 288 if (ldsem_down_read_trylock(&tty->ldisc_sem)) { 289 ld = tty->ldisc; 290 if (!ld) 291 ldsem_up_read(&tty->ldisc_sem); 292 } 293 return ld; 294 } 295 EXPORT_SYMBOL_GPL(tty_ldisc_ref); 296 297 /** 298 * tty_ldisc_deref - free a tty ldisc reference 299 * @ld: reference to free up 300 * 301 * Undoes the effect of tty_ldisc_ref or tty_ldisc_ref_wait. May 302 * be called in IRQ context. 303 */ 304 305 void tty_ldisc_deref(struct tty_ldisc *ld) 306 { 307 ldsem_up_read(&ld->tty->ldisc_sem); 308 } 309 EXPORT_SYMBOL_GPL(tty_ldisc_deref); 310 311 312 static inline int 313 __tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout) 314 { 315 return ldsem_down_write(&tty->ldisc_sem, timeout); 316 } 317 318 static inline int 319 __tty_ldisc_lock_nested(struct tty_struct *tty, unsigned long timeout) 320 { 321 return ldsem_down_write_nested(&tty->ldisc_sem, 322 LDISC_SEM_OTHER, timeout); 323 } 324 325 static inline void __tty_ldisc_unlock(struct tty_struct *tty) 326 { 327 ldsem_up_write(&tty->ldisc_sem); 328 } 329 330 int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout) 331 { 332 int ret; 333 334 /* Kindly asking blocked readers to release the read side */ 335 set_bit(TTY_LDISC_CHANGING, &tty->flags); 336 wake_up_interruptible_all(&tty->read_wait); 337 wake_up_interruptible_all(&tty->write_wait); 338 339 ret = __tty_ldisc_lock(tty, timeout); 340 if (!ret) 341 return -EBUSY; 342 set_bit(TTY_LDISC_HALTED, &tty->flags); 343 return 0; 344 } 345 346 void tty_ldisc_unlock(struct tty_struct *tty) 347 { 348 clear_bit(TTY_LDISC_HALTED, &tty->flags); 349 /* Can be cleared here - ldisc_unlock will wake up writers firstly */ 350 clear_bit(TTY_LDISC_CHANGING, &tty->flags); 351 __tty_ldisc_unlock(tty); 352 } 353 354 static int 355 tty_ldisc_lock_pair_timeout(struct tty_struct *tty, struct tty_struct *tty2, 356 unsigned long timeout) 357 { 358 int ret; 359 360 if (tty < tty2) { 361 ret = __tty_ldisc_lock(tty, timeout); 362 if (ret) { 363 ret = __tty_ldisc_lock_nested(tty2, timeout); 364 if (!ret) 365 __tty_ldisc_unlock(tty); 366 } 367 } else { 368 /* if this is possible, it has lots of implications */ 369 WARN_ON_ONCE(tty == tty2); 370 if (tty2 && tty != tty2) { 371 ret = __tty_ldisc_lock(tty2, timeout); 372 if (ret) { 373 ret = __tty_ldisc_lock_nested(tty, timeout); 374 if (!ret) 375 __tty_ldisc_unlock(tty2); 376 } 377 } else 378 ret = __tty_ldisc_lock(tty, timeout); 379 } 380 381 if (!ret) 382 return -EBUSY; 383 384 set_bit(TTY_LDISC_HALTED, &tty->flags); 385 if (tty2) 386 set_bit(TTY_LDISC_HALTED, &tty2->flags); 387 return 0; 388 } 389 390 static void tty_ldisc_lock_pair(struct tty_struct *tty, struct tty_struct *tty2) 391 { 392 tty_ldisc_lock_pair_timeout(tty, tty2, MAX_SCHEDULE_TIMEOUT); 393 } 394 395 static void tty_ldisc_unlock_pair(struct tty_struct *tty, 396 struct tty_struct *tty2) 397 { 398 __tty_ldisc_unlock(tty); 399 if (tty2) 400 __tty_ldisc_unlock(tty2); 401 } 402 403 /** 404 * tty_ldisc_flush - flush line discipline queue 405 * @tty: tty 406 * 407 * Flush the line discipline queue (if any) and the tty flip buffers 408 * for this tty. 409 */ 410 411 void tty_ldisc_flush(struct tty_struct *tty) 412 { 413 struct tty_ldisc *ld = tty_ldisc_ref(tty); 414 415 tty_buffer_flush(tty, ld); 416 if (ld) 417 tty_ldisc_deref(ld); 418 } 419 EXPORT_SYMBOL_GPL(tty_ldisc_flush); 420 421 /** 422 * tty_set_termios_ldisc - set ldisc field 423 * @tty: tty structure 424 * @disc: line discipline number 425 * 426 * This is probably overkill for real world processors but 427 * they are not on hot paths so a little discipline won't do 428 * any harm. 429 * 430 * The line discipline-related tty_struct fields are reset to 431 * prevent the ldisc driver from re-using stale information for 432 * the new ldisc instance. 433 * 434 * Locking: takes termios_rwsem 435 */ 436 437 static void tty_set_termios_ldisc(struct tty_struct *tty, int disc) 438 { 439 down_write(&tty->termios_rwsem); 440 tty->termios.c_line = disc; 441 up_write(&tty->termios_rwsem); 442 443 tty->disc_data = NULL; 444 tty->receive_room = 0; 445 } 446 447 /** 448 * tty_ldisc_open - open a line discipline 449 * @tty: tty we are opening the ldisc on 450 * @ld: discipline to open 451 * 452 * A helper opening method. Also a convenient debugging and check 453 * point. 454 * 455 * Locking: always called with BTM already held. 456 */ 457 458 static int tty_ldisc_open(struct tty_struct *tty, struct tty_ldisc *ld) 459 { 460 WARN_ON(test_and_set_bit(TTY_LDISC_OPEN, &tty->flags)); 461 if (ld->ops->open) { 462 int ret; 463 /* BTM here locks versus a hangup event */ 464 ret = ld->ops->open(tty); 465 if (ret) 466 clear_bit(TTY_LDISC_OPEN, &tty->flags); 467 468 tty_ldisc_debug(tty, "%p: opened\n", ld); 469 return ret; 470 } 471 return 0; 472 } 473 474 /** 475 * tty_ldisc_close - close a line discipline 476 * @tty: tty we are opening the ldisc on 477 * @ld: discipline to close 478 * 479 * A helper close method. Also a convenient debugging and check 480 * point. 481 */ 482 483 static void tty_ldisc_close(struct tty_struct *tty, struct tty_ldisc *ld) 484 { 485 lockdep_assert_held_write(&tty->ldisc_sem); 486 WARN_ON(!test_bit(TTY_LDISC_OPEN, &tty->flags)); 487 clear_bit(TTY_LDISC_OPEN, &tty->flags); 488 if (ld->ops->close) 489 ld->ops->close(tty); 490 tty_ldisc_debug(tty, "%p: closed\n", ld); 491 } 492 493 /** 494 * tty_ldisc_failto - helper for ldisc failback 495 * @tty: tty to open the ldisc on 496 * @ld: ldisc we are trying to fail back to 497 * 498 * Helper to try and recover a tty when switching back to the old 499 * ldisc fails and we need something attached. 500 */ 501 502 static int tty_ldisc_failto(struct tty_struct *tty, int ld) 503 { 504 struct tty_ldisc *disc = tty_ldisc_get(tty, ld); 505 int r; 506 507 lockdep_assert_held_write(&tty->ldisc_sem); 508 if (IS_ERR(disc)) 509 return PTR_ERR(disc); 510 tty->ldisc = disc; 511 tty_set_termios_ldisc(tty, ld); 512 r = tty_ldisc_open(tty, disc); 513 if (r < 0) 514 tty_ldisc_put(disc); 515 return r; 516 } 517 518 /** 519 * tty_ldisc_restore - helper for tty ldisc change 520 * @tty: tty to recover 521 * @old: previous ldisc 522 * 523 * Restore the previous line discipline or N_TTY when a line discipline 524 * change fails due to an open error 525 */ 526 527 static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old) 528 { 529 /* There is an outstanding reference here so this is safe */ 530 if (tty_ldisc_failto(tty, old->ops->num) < 0) { 531 const char *name = tty_name(tty); 532 533 pr_warn("Falling back ldisc for %s.\n", name); 534 /* 535 * The traditional behaviour is to fall back to N_TTY, we 536 * want to avoid falling back to N_NULL unless we have no 537 * choice to avoid the risk of breaking anything 538 */ 539 if (tty_ldisc_failto(tty, N_TTY) < 0 && 540 tty_ldisc_failto(tty, N_NULL) < 0) 541 panic("Couldn't open N_NULL ldisc for %s.", name); 542 } 543 } 544 545 /** 546 * tty_set_ldisc - set line discipline 547 * @tty: the terminal to set 548 * @disc: the line discipline number 549 * 550 * Set the discipline of a tty line. Must be called from a process 551 * context. The ldisc change logic has to protect itself against any 552 * overlapping ldisc change (including on the other end of pty pairs), 553 * the close of one side of a tty/pty pair, and eventually hangup. 554 */ 555 556 int tty_set_ldisc(struct tty_struct *tty, int disc) 557 { 558 int retval; 559 struct tty_ldisc *old_ldisc, *new_ldisc; 560 561 new_ldisc = tty_ldisc_get(tty, disc); 562 if (IS_ERR(new_ldisc)) 563 return PTR_ERR(new_ldisc); 564 565 tty_lock(tty); 566 retval = tty_ldisc_lock(tty, 5 * HZ); 567 if (retval) 568 goto err; 569 570 if (!tty->ldisc) { 571 retval = -EIO; 572 goto out; 573 } 574 575 /* Check the no-op case */ 576 if (tty->ldisc->ops->num == disc) 577 goto out; 578 579 if (test_bit(TTY_HUPPED, &tty->flags)) { 580 /* We were raced by hangup */ 581 retval = -EIO; 582 goto out; 583 } 584 585 old_ldisc = tty->ldisc; 586 587 /* Shutdown the old discipline. */ 588 tty_ldisc_close(tty, old_ldisc); 589 590 /* Now set up the new line discipline. */ 591 tty->ldisc = new_ldisc; 592 tty_set_termios_ldisc(tty, disc); 593 594 retval = tty_ldisc_open(tty, new_ldisc); 595 if (retval < 0) { 596 /* Back to the old one or N_TTY if we can't */ 597 tty_ldisc_put(new_ldisc); 598 tty_ldisc_restore(tty, old_ldisc); 599 } 600 601 if (tty->ldisc->ops->num != old_ldisc->ops->num && tty->ops->set_ldisc) { 602 down_read(&tty->termios_rwsem); 603 tty->ops->set_ldisc(tty); 604 up_read(&tty->termios_rwsem); 605 } 606 607 /* 608 * At this point we hold a reference to the new ldisc and a 609 * reference to the old ldisc, or we hold two references to 610 * the old ldisc (if it was restored as part of error cleanup 611 * above). In either case, releasing a single reference from 612 * the old ldisc is correct. 613 */ 614 new_ldisc = old_ldisc; 615 out: 616 tty_ldisc_unlock(tty); 617 618 /* 619 * Restart the work queue in case no characters kick it off. Safe if 620 * already running 621 */ 622 tty_buffer_restart_work(tty->port); 623 err: 624 tty_ldisc_put(new_ldisc); /* drop the extra reference */ 625 tty_unlock(tty); 626 return retval; 627 } 628 EXPORT_SYMBOL_GPL(tty_set_ldisc); 629 630 /** 631 * tty_ldisc_kill - teardown ldisc 632 * @tty: tty being released 633 * 634 * Perform final close of the ldisc and reset tty->ldisc 635 */ 636 static void tty_ldisc_kill(struct tty_struct *tty) 637 { 638 lockdep_assert_held_write(&tty->ldisc_sem); 639 if (!tty->ldisc) 640 return; 641 /* 642 * Now kill off the ldisc 643 */ 644 tty_ldisc_close(tty, tty->ldisc); 645 tty_ldisc_put(tty->ldisc); 646 /* Force an oops if we mess this up */ 647 tty->ldisc = NULL; 648 } 649 650 /** 651 * tty_reset_termios - reset terminal state 652 * @tty: tty to reset 653 * 654 * Restore a terminal to the driver default state. 655 */ 656 657 static void tty_reset_termios(struct tty_struct *tty) 658 { 659 down_write(&tty->termios_rwsem); 660 tty->termios = tty->driver->init_termios; 661 tty->termios.c_ispeed = tty_termios_input_baud_rate(&tty->termios); 662 tty->termios.c_ospeed = tty_termios_baud_rate(&tty->termios); 663 up_write(&tty->termios_rwsem); 664 } 665 666 667 /** 668 * tty_ldisc_reinit - reinitialise the tty ldisc 669 * @tty: tty to reinit 670 * @disc: line discipline to reinitialize 671 * 672 * Completely reinitialize the line discipline state, by closing the 673 * current instance, if there is one, and opening a new instance. If 674 * an error occurs opening the new non-N_TTY instance, the instance 675 * is dropped and tty->ldisc reset to NULL. The caller can then retry 676 * with N_TTY instead. 677 * 678 * Returns 0 if successful, otherwise error code < 0 679 */ 680 681 int tty_ldisc_reinit(struct tty_struct *tty, int disc) 682 { 683 struct tty_ldisc *ld; 684 int retval; 685 686 lockdep_assert_held_write(&tty->ldisc_sem); 687 ld = tty_ldisc_get(tty, disc); 688 if (IS_ERR(ld)) { 689 BUG_ON(disc == N_TTY); 690 return PTR_ERR(ld); 691 } 692 693 if (tty->ldisc) { 694 tty_ldisc_close(tty, tty->ldisc); 695 tty_ldisc_put(tty->ldisc); 696 } 697 698 /* switch the line discipline */ 699 tty->ldisc = ld; 700 tty_set_termios_ldisc(tty, disc); 701 retval = tty_ldisc_open(tty, tty->ldisc); 702 if (retval) { 703 tty_ldisc_put(tty->ldisc); 704 tty->ldisc = NULL; 705 } 706 return retval; 707 } 708 709 /** 710 * tty_ldisc_hangup - hangup ldisc reset 711 * @tty: tty being hung up 712 * @reinit: whether to re-initialise the tty 713 * 714 * Some tty devices reset their termios when they receive a hangup 715 * event. In that situation we must also switch back to N_TTY properly 716 * before we reset the termios data. 717 * 718 * Locking: We can take the ldisc mutex as the rest of the code is 719 * careful to allow for this. 720 * 721 * In the pty pair case this occurs in the close() path of the 722 * tty itself so we must be careful about locking rules. 723 */ 724 725 void tty_ldisc_hangup(struct tty_struct *tty, bool reinit) 726 { 727 struct tty_ldisc *ld; 728 729 tty_ldisc_debug(tty, "%p: hangup\n", tty->ldisc); 730 731 ld = tty_ldisc_ref(tty); 732 if (ld != NULL) { 733 if (ld->ops->flush_buffer) 734 ld->ops->flush_buffer(tty); 735 tty_driver_flush_buffer(tty); 736 if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) && 737 ld->ops->write_wakeup) 738 ld->ops->write_wakeup(tty); 739 if (ld->ops->hangup) 740 ld->ops->hangup(tty); 741 tty_ldisc_deref(ld); 742 } 743 744 wake_up_interruptible_poll(&tty->write_wait, EPOLLOUT); 745 wake_up_interruptible_poll(&tty->read_wait, EPOLLIN); 746 747 /* 748 * Shutdown the current line discipline, and reset it to 749 * N_TTY if need be. 750 * 751 * Avoid racing set_ldisc or tty_ldisc_release 752 */ 753 tty_ldisc_lock(tty, MAX_SCHEDULE_TIMEOUT); 754 755 if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) 756 tty_reset_termios(tty); 757 758 if (tty->ldisc) { 759 if (reinit) { 760 if (tty_ldisc_reinit(tty, tty->termios.c_line) < 0 && 761 tty_ldisc_reinit(tty, N_TTY) < 0) 762 WARN_ON(tty_ldisc_reinit(tty, N_NULL) < 0); 763 } else 764 tty_ldisc_kill(tty); 765 } 766 tty_ldisc_unlock(tty); 767 } 768 769 /** 770 * tty_ldisc_setup - open line discipline 771 * @tty: tty being shut down 772 * @o_tty: pair tty for pty/tty pairs 773 * 774 * Called during the initial open of a tty/pty pair in order to set up the 775 * line disciplines and bind them to the tty. This has no locking issues 776 * as the device isn't yet active. 777 */ 778 779 int tty_ldisc_setup(struct tty_struct *tty, struct tty_struct *o_tty) 780 { 781 int retval = tty_ldisc_open(tty, tty->ldisc); 782 783 if (retval) 784 return retval; 785 786 if (o_tty) { 787 /* 788 * Called without o_tty->ldisc_sem held, as o_tty has been 789 * just allocated and no one has a reference to it. 790 */ 791 retval = tty_ldisc_open(o_tty, o_tty->ldisc); 792 if (retval) { 793 tty_ldisc_close(tty, tty->ldisc); 794 return retval; 795 } 796 } 797 return 0; 798 } 799 800 /** 801 * tty_ldisc_release - release line discipline 802 * @tty: tty being shut down (or one end of pty pair) 803 * 804 * Called during the final close of a tty or a pty pair in order to shut 805 * down the line discpline layer. On exit, each tty's ldisc is NULL. 806 */ 807 808 void tty_ldisc_release(struct tty_struct *tty) 809 { 810 struct tty_struct *o_tty = tty->link; 811 812 /* 813 * Shutdown this line discipline. As this is the final close, 814 * it does not race with the set_ldisc code path. 815 */ 816 817 tty_ldisc_lock_pair(tty, o_tty); 818 tty_ldisc_kill(tty); 819 if (o_tty) 820 tty_ldisc_kill(o_tty); 821 tty_ldisc_unlock_pair(tty, o_tty); 822 823 /* 824 * And the memory resources remaining (buffers, termios) will be 825 * disposed of when the kref hits zero 826 */ 827 828 tty_ldisc_debug(tty, "released\n"); 829 } 830 EXPORT_SYMBOL_GPL(tty_ldisc_release); 831 832 /** 833 * tty_ldisc_init - ldisc setup for new tty 834 * @tty: tty being allocated 835 * 836 * Set up the line discipline objects for a newly allocated tty. Note that 837 * the tty structure is not completely set up when this call is made. 838 */ 839 840 int tty_ldisc_init(struct tty_struct *tty) 841 { 842 struct tty_ldisc *ld = tty_ldisc_get(tty, N_TTY); 843 844 if (IS_ERR(ld)) 845 return PTR_ERR(ld); 846 tty->ldisc = ld; 847 return 0; 848 } 849 850 /** 851 * tty_ldisc_deinit - ldisc cleanup for new tty 852 * @tty: tty that was allocated recently 853 * 854 * The tty structure must not becompletely set up (tty_ldisc_setup) when 855 * this call is made. 856 */ 857 void tty_ldisc_deinit(struct tty_struct *tty) 858 { 859 /* no ldisc_sem, tty is being destroyed */ 860 if (tty->ldisc) 861 tty_ldisc_put(tty->ldisc); 862 tty->ldisc = NULL; 863 } 864 865 static struct ctl_table tty_table[] = { 866 { 867 .procname = "ldisc_autoload", 868 .data = &tty_ldisc_autoload, 869 .maxlen = sizeof(tty_ldisc_autoload), 870 .mode = 0644, 871 .proc_handler = proc_dointvec, 872 .extra1 = SYSCTL_ZERO, 873 .extra2 = SYSCTL_ONE, 874 }, 875 { } 876 }; 877 878 static struct ctl_table tty_dir_table[] = { 879 { 880 .procname = "tty", 881 .mode = 0555, 882 .child = tty_table, 883 }, 884 { } 885 }; 886 887 static struct ctl_table tty_root_table[] = { 888 { 889 .procname = "dev", 890 .mode = 0555, 891 .child = tty_dir_table, 892 }, 893 { } 894 }; 895 896 void tty_sysctl_init(void) 897 { 898 register_sysctl_table(tty_root_table); 899 } 900