1 /* 2 * n_tty.c --- implements the N_TTY line discipline. 3 * 4 * This code used to be in tty_io.c, but things are getting hairy 5 * enough that it made sense to split things off. (The N_TTY 6 * processing has changed so much that it's hardly recognizable, 7 * anyway...) 8 * 9 * Note that the open routine for N_TTY is guaranteed never to return 10 * an error. This is because Linux will fall back to setting a line 11 * to N_TTY if it can not switch to any other line discipline. 12 * 13 * Written by Theodore Ts'o, Copyright 1994. 14 * 15 * This file also contains code originally written by Linus Torvalds, 16 * Copyright 1991, 1992, 1993, and by Julian Cowley, Copyright 1994. 17 * 18 * This file may be redistributed under the terms of the GNU General Public 19 * License. 20 * 21 * Reduced memory usage for older ARM systems - Russell King. 22 * 23 * 2000/01/20 Fixed SMP locking on put_tty_queue using bits of 24 * the patch by Andrew J. Kroll <ag784@freenet.buffalo.edu> 25 * who actually finally proved there really was a race. 26 * 27 * 2002/03/18 Implemented n_tty_wakeup to send SIGIO POLL_OUTs to 28 * waiting writing processes-Sapan Bhatia <sapan@corewars.org>. 29 * Also fixed a bug in BLOCKING mode where n_tty_write returns 30 * EAGAIN 31 */ 32 33 #include <linux/types.h> 34 #include <linux/major.h> 35 #include <linux/errno.h> 36 #include <linux/signal.h> 37 #include <linux/fcntl.h> 38 #include <linux/sched.h> 39 #include <linux/interrupt.h> 40 #include <linux/tty.h> 41 #include <linux/timer.h> 42 #include <linux/ctype.h> 43 #include <linux/mm.h> 44 #include <linux/string.h> 45 #include <linux/slab.h> 46 #include <linux/poll.h> 47 #include <linux/bitops.h> 48 #include <linux/audit.h> 49 #include <linux/file.h> 50 #include <linux/uaccess.h> 51 #include <linux/module.h> 52 #include <linux/ratelimit.h> 53 #include <linux/vmalloc.h> 54 55 56 /* number of characters left in xmit buffer before select has we have room */ 57 #define WAKEUP_CHARS 256 58 59 /* 60 * This defines the low- and high-watermarks for throttling and 61 * unthrottling the TTY driver. These watermarks are used for 62 * controlling the space in the read buffer. 63 */ 64 #define TTY_THRESHOLD_THROTTLE 128 /* now based on remaining room */ 65 #define TTY_THRESHOLD_UNTHROTTLE 128 66 67 /* 68 * Special byte codes used in the echo buffer to represent operations 69 * or special handling of characters. Bytes in the echo buffer that 70 * are not part of such special blocks are treated as normal character 71 * codes. 72 */ 73 #define ECHO_OP_START 0xff 74 #define ECHO_OP_MOVE_BACK_COL 0x80 75 #define ECHO_OP_SET_CANON_COL 0x81 76 #define ECHO_OP_ERASE_TAB 0x82 77 78 #define ECHO_COMMIT_WATERMARK 256 79 #define ECHO_BLOCK 256 80 #define ECHO_DISCARD_WATERMARK N_TTY_BUF_SIZE - (ECHO_BLOCK + 32) 81 82 83 #undef N_TTY_TRACE 84 #ifdef N_TTY_TRACE 85 # define n_tty_trace(f, args...) trace_printk(f, ##args) 86 #else 87 # define n_tty_trace(f, args...) 88 #endif 89 90 struct n_tty_data { 91 /* producer-published */ 92 size_t read_head; 93 size_t commit_head; 94 size_t canon_head; 95 size_t echo_head; 96 size_t echo_commit; 97 size_t echo_mark; 98 DECLARE_BITMAP(char_map, 256); 99 100 /* private to n_tty_receive_overrun (single-threaded) */ 101 unsigned long overrun_time; 102 int num_overrun; 103 104 /* non-atomic */ 105 bool no_room; 106 107 /* must hold exclusive termios_rwsem to reset these */ 108 unsigned char lnext:1, erasing:1, raw:1, real_raw:1, icanon:1; 109 unsigned char push:1; 110 111 /* shared by producer and consumer */ 112 char read_buf[N_TTY_BUF_SIZE]; 113 DECLARE_BITMAP(read_flags, N_TTY_BUF_SIZE); 114 unsigned char echo_buf[N_TTY_BUF_SIZE]; 115 116 int minimum_to_wake; 117 118 /* consumer-published */ 119 size_t read_tail; 120 size_t line_start; 121 122 /* protected by output lock */ 123 unsigned int column; 124 unsigned int canon_column; 125 size_t echo_tail; 126 127 struct mutex atomic_read_lock; 128 struct mutex output_lock; 129 }; 130 131 static inline size_t read_cnt(struct n_tty_data *ldata) 132 { 133 return ldata->read_head - ldata->read_tail; 134 } 135 136 static inline unsigned char read_buf(struct n_tty_data *ldata, size_t i) 137 { 138 return ldata->read_buf[i & (N_TTY_BUF_SIZE - 1)]; 139 } 140 141 static inline unsigned char *read_buf_addr(struct n_tty_data *ldata, size_t i) 142 { 143 return &ldata->read_buf[i & (N_TTY_BUF_SIZE - 1)]; 144 } 145 146 static inline unsigned char echo_buf(struct n_tty_data *ldata, size_t i) 147 { 148 return ldata->echo_buf[i & (N_TTY_BUF_SIZE - 1)]; 149 } 150 151 static inline unsigned char *echo_buf_addr(struct n_tty_data *ldata, size_t i) 152 { 153 return &ldata->echo_buf[i & (N_TTY_BUF_SIZE - 1)]; 154 } 155 156 static inline int tty_put_user(struct tty_struct *tty, unsigned char x, 157 unsigned char __user *ptr) 158 { 159 struct n_tty_data *ldata = tty->disc_data; 160 161 tty_audit_add_data(tty, &x, 1, ldata->icanon); 162 return put_user(x, ptr); 163 } 164 165 /** 166 * n_tty_kick_worker - start input worker (if required) 167 * @tty: terminal 168 * 169 * Re-schedules the flip buffer work if it may have stopped 170 * 171 * Caller holds exclusive termios_rwsem 172 * or 173 * n_tty_read()/consumer path: 174 * holds non-exclusive termios_rwsem 175 */ 176 177 static void n_tty_kick_worker(struct tty_struct *tty) 178 { 179 struct n_tty_data *ldata = tty->disc_data; 180 181 /* Did the input worker stop? Restart it */ 182 if (unlikely(ldata->no_room)) { 183 ldata->no_room = 0; 184 185 WARN_RATELIMIT(tty->port->itty == NULL, 186 "scheduling with invalid itty\n"); 187 /* see if ldisc has been killed - if so, this means that 188 * even though the ldisc has been halted and ->buf.work 189 * cancelled, ->buf.work is about to be rescheduled 190 */ 191 WARN_RATELIMIT(test_bit(TTY_LDISC_HALTED, &tty->flags), 192 "scheduling buffer work for halted ldisc\n"); 193 queue_work(system_unbound_wq, &tty->port->buf.work); 194 } 195 } 196 197 static ssize_t chars_in_buffer(struct tty_struct *tty) 198 { 199 struct n_tty_data *ldata = tty->disc_data; 200 ssize_t n = 0; 201 202 if (!ldata->icanon) 203 n = ldata->commit_head - ldata->read_tail; 204 else 205 n = ldata->canon_head - ldata->read_tail; 206 return n; 207 } 208 209 /** 210 * n_tty_write_wakeup - asynchronous I/O notifier 211 * @tty: tty device 212 * 213 * Required for the ptys, serial driver etc. since processes 214 * that attach themselves to the master and rely on ASYNC 215 * IO must be woken up 216 */ 217 218 static void n_tty_write_wakeup(struct tty_struct *tty) 219 { 220 if (tty->fasync && test_and_clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) 221 kill_fasync(&tty->fasync, SIGIO, POLL_OUT); 222 } 223 224 static void n_tty_check_throttle(struct tty_struct *tty) 225 { 226 struct n_tty_data *ldata = tty->disc_data; 227 228 /* 229 * Check the remaining room for the input canonicalization 230 * mode. We don't want to throttle the driver if we're in 231 * canonical mode and don't have a newline yet! 232 */ 233 if (ldata->icanon && ldata->canon_head == ldata->read_tail) 234 return; 235 236 while (1) { 237 int throttled; 238 tty_set_flow_change(tty, TTY_THROTTLE_SAFE); 239 if (N_TTY_BUF_SIZE - read_cnt(ldata) >= TTY_THRESHOLD_THROTTLE) 240 break; 241 throttled = tty_throttle_safe(tty); 242 if (!throttled) 243 break; 244 } 245 __tty_set_flow_change(tty, 0); 246 } 247 248 static void n_tty_check_unthrottle(struct tty_struct *tty) 249 { 250 if (tty->driver->type == TTY_DRIVER_TYPE_PTY && 251 tty->link->ldisc->ops->write_wakeup == n_tty_write_wakeup) { 252 if (chars_in_buffer(tty) > TTY_THRESHOLD_UNTHROTTLE) 253 return; 254 if (!tty->count) 255 return; 256 n_tty_kick_worker(tty); 257 n_tty_write_wakeup(tty->link); 258 if (waitqueue_active(&tty->link->write_wait)) 259 wake_up_interruptible_poll(&tty->link->write_wait, POLLOUT); 260 return; 261 } 262 263 /* If there is enough space in the read buffer now, let the 264 * low-level driver know. We use chars_in_buffer() to 265 * check the buffer, as it now knows about canonical mode. 266 * Otherwise, if the driver is throttled and the line is 267 * longer than TTY_THRESHOLD_UNTHROTTLE in canonical mode, 268 * we won't get any more characters. 269 */ 270 271 while (1) { 272 int unthrottled; 273 tty_set_flow_change(tty, TTY_UNTHROTTLE_SAFE); 274 if (chars_in_buffer(tty) > TTY_THRESHOLD_UNTHROTTLE) 275 break; 276 if (!tty->count) 277 break; 278 n_tty_kick_worker(tty); 279 unthrottled = tty_unthrottle_safe(tty); 280 if (!unthrottled) 281 break; 282 } 283 __tty_set_flow_change(tty, 0); 284 } 285 286 /** 287 * put_tty_queue - add character to tty 288 * @c: character 289 * @ldata: n_tty data 290 * 291 * Add a character to the tty read_buf queue. 292 * 293 * n_tty_receive_buf()/producer path: 294 * caller holds non-exclusive termios_rwsem 295 */ 296 297 static inline void put_tty_queue(unsigned char c, struct n_tty_data *ldata) 298 { 299 *read_buf_addr(ldata, ldata->read_head) = c; 300 ldata->read_head++; 301 } 302 303 /** 304 * reset_buffer_flags - reset buffer state 305 * @tty: terminal to reset 306 * 307 * Reset the read buffer counters and clear the flags. 308 * Called from n_tty_open() and n_tty_flush_buffer(). 309 * 310 * Locking: caller holds exclusive termios_rwsem 311 * (or locking is not required) 312 */ 313 314 static void reset_buffer_flags(struct n_tty_data *ldata) 315 { 316 ldata->read_head = ldata->canon_head = ldata->read_tail = 0; 317 ldata->echo_head = ldata->echo_tail = ldata->echo_commit = 0; 318 ldata->commit_head = 0; 319 ldata->echo_mark = 0; 320 ldata->line_start = 0; 321 322 ldata->erasing = 0; 323 bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE); 324 ldata->push = 0; 325 } 326 327 static void n_tty_packet_mode_flush(struct tty_struct *tty) 328 { 329 unsigned long flags; 330 331 if (tty->link->packet) { 332 spin_lock_irqsave(&tty->ctrl_lock, flags); 333 tty->ctrl_status |= TIOCPKT_FLUSHREAD; 334 spin_unlock_irqrestore(&tty->ctrl_lock, flags); 335 if (waitqueue_active(&tty->link->read_wait)) 336 wake_up_interruptible(&tty->link->read_wait); 337 } 338 } 339 340 /** 341 * n_tty_flush_buffer - clean input queue 342 * @tty: terminal device 343 * 344 * Flush the input buffer. Called when the tty layer wants the 345 * buffer flushed (eg at hangup) or when the N_TTY line discipline 346 * internally has to clean the pending queue (for example some signals). 347 * 348 * Holds termios_rwsem to exclude producer/consumer while 349 * buffer indices are reset. 350 * 351 * Locking: ctrl_lock, exclusive termios_rwsem 352 */ 353 354 static void n_tty_flush_buffer(struct tty_struct *tty) 355 { 356 down_write(&tty->termios_rwsem); 357 reset_buffer_flags(tty->disc_data); 358 n_tty_kick_worker(tty); 359 360 if (tty->link) 361 n_tty_packet_mode_flush(tty); 362 up_write(&tty->termios_rwsem); 363 } 364 365 /** 366 * n_tty_chars_in_buffer - report available bytes 367 * @tty: tty device 368 * 369 * Report the number of characters buffered to be delivered to user 370 * at this instant in time. 371 * 372 * Locking: exclusive termios_rwsem 373 */ 374 375 static ssize_t n_tty_chars_in_buffer(struct tty_struct *tty) 376 { 377 ssize_t n; 378 379 WARN_ONCE(1, "%s is deprecated and scheduled for removal.", __func__); 380 381 down_write(&tty->termios_rwsem); 382 n = chars_in_buffer(tty); 383 up_write(&tty->termios_rwsem); 384 return n; 385 } 386 387 /** 388 * is_utf8_continuation - utf8 multibyte check 389 * @c: byte to check 390 * 391 * Returns true if the utf8 character 'c' is a multibyte continuation 392 * character. We use this to correctly compute the on screen size 393 * of the character when printing 394 */ 395 396 static inline int is_utf8_continuation(unsigned char c) 397 { 398 return (c & 0xc0) == 0x80; 399 } 400 401 /** 402 * is_continuation - multibyte check 403 * @c: byte to check 404 * 405 * Returns true if the utf8 character 'c' is a multibyte continuation 406 * character and the terminal is in unicode mode. 407 */ 408 409 static inline int is_continuation(unsigned char c, struct tty_struct *tty) 410 { 411 return I_IUTF8(tty) && is_utf8_continuation(c); 412 } 413 414 /** 415 * do_output_char - output one character 416 * @c: character (or partial unicode symbol) 417 * @tty: terminal device 418 * @space: space available in tty driver write buffer 419 * 420 * This is a helper function that handles one output character 421 * (including special characters like TAB, CR, LF, etc.), 422 * doing OPOST processing and putting the results in the 423 * tty driver's write buffer. 424 * 425 * Note that Linux currently ignores TABDLY, CRDLY, VTDLY, FFDLY 426 * and NLDLY. They simply aren't relevant in the world today. 427 * If you ever need them, add them here. 428 * 429 * Returns the number of bytes of buffer space used or -1 if 430 * no space left. 431 * 432 * Locking: should be called under the output_lock to protect 433 * the column state and space left in the buffer 434 */ 435 436 static int do_output_char(unsigned char c, struct tty_struct *tty, int space) 437 { 438 struct n_tty_data *ldata = tty->disc_data; 439 int spaces; 440 441 if (!space) 442 return -1; 443 444 switch (c) { 445 case '\n': 446 if (O_ONLRET(tty)) 447 ldata->column = 0; 448 if (O_ONLCR(tty)) { 449 if (space < 2) 450 return -1; 451 ldata->canon_column = ldata->column = 0; 452 tty->ops->write(tty, "\r\n", 2); 453 return 2; 454 } 455 ldata->canon_column = ldata->column; 456 break; 457 case '\r': 458 if (O_ONOCR(tty) && ldata->column == 0) 459 return 0; 460 if (O_OCRNL(tty)) { 461 c = '\n'; 462 if (O_ONLRET(tty)) 463 ldata->canon_column = ldata->column = 0; 464 break; 465 } 466 ldata->canon_column = ldata->column = 0; 467 break; 468 case '\t': 469 spaces = 8 - (ldata->column & 7); 470 if (O_TABDLY(tty) == XTABS) { 471 if (space < spaces) 472 return -1; 473 ldata->column += spaces; 474 tty->ops->write(tty, " ", spaces); 475 return spaces; 476 } 477 ldata->column += spaces; 478 break; 479 case '\b': 480 if (ldata->column > 0) 481 ldata->column--; 482 break; 483 default: 484 if (!iscntrl(c)) { 485 if (O_OLCUC(tty)) 486 c = toupper(c); 487 if (!is_continuation(c, tty)) 488 ldata->column++; 489 } 490 break; 491 } 492 493 tty_put_char(tty, c); 494 return 1; 495 } 496 497 /** 498 * process_output - output post processor 499 * @c: character (or partial unicode symbol) 500 * @tty: terminal device 501 * 502 * Output one character with OPOST processing. 503 * Returns -1 when the output device is full and the character 504 * must be retried. 505 * 506 * Locking: output_lock to protect column state and space left 507 * (also, this is called from n_tty_write under the 508 * tty layer write lock) 509 */ 510 511 static int process_output(unsigned char c, struct tty_struct *tty) 512 { 513 struct n_tty_data *ldata = tty->disc_data; 514 int space, retval; 515 516 mutex_lock(&ldata->output_lock); 517 518 space = tty_write_room(tty); 519 retval = do_output_char(c, tty, space); 520 521 mutex_unlock(&ldata->output_lock); 522 if (retval < 0) 523 return -1; 524 else 525 return 0; 526 } 527 528 /** 529 * process_output_block - block post processor 530 * @tty: terminal device 531 * @buf: character buffer 532 * @nr: number of bytes to output 533 * 534 * Output a block of characters with OPOST processing. 535 * Returns the number of characters output. 536 * 537 * This path is used to speed up block console writes, among other 538 * things when processing blocks of output data. It handles only 539 * the simple cases normally found and helps to generate blocks of 540 * symbols for the console driver and thus improve performance. 541 * 542 * Locking: output_lock to protect column state and space left 543 * (also, this is called from n_tty_write under the 544 * tty layer write lock) 545 */ 546 547 static ssize_t process_output_block(struct tty_struct *tty, 548 const unsigned char *buf, unsigned int nr) 549 { 550 struct n_tty_data *ldata = tty->disc_data; 551 int space; 552 int i; 553 const unsigned char *cp; 554 555 mutex_lock(&ldata->output_lock); 556 557 space = tty_write_room(tty); 558 if (!space) { 559 mutex_unlock(&ldata->output_lock); 560 return 0; 561 } 562 if (nr > space) 563 nr = space; 564 565 for (i = 0, cp = buf; i < nr; i++, cp++) { 566 unsigned char c = *cp; 567 568 switch (c) { 569 case '\n': 570 if (O_ONLRET(tty)) 571 ldata->column = 0; 572 if (O_ONLCR(tty)) 573 goto break_out; 574 ldata->canon_column = ldata->column; 575 break; 576 case '\r': 577 if (O_ONOCR(tty) && ldata->column == 0) 578 goto break_out; 579 if (O_OCRNL(tty)) 580 goto break_out; 581 ldata->canon_column = ldata->column = 0; 582 break; 583 case '\t': 584 goto break_out; 585 case '\b': 586 if (ldata->column > 0) 587 ldata->column--; 588 break; 589 default: 590 if (!iscntrl(c)) { 591 if (O_OLCUC(tty)) 592 goto break_out; 593 if (!is_continuation(c, tty)) 594 ldata->column++; 595 } 596 break; 597 } 598 } 599 break_out: 600 i = tty->ops->write(tty, buf, i); 601 602 mutex_unlock(&ldata->output_lock); 603 return i; 604 } 605 606 /** 607 * process_echoes - write pending echo characters 608 * @tty: terminal device 609 * 610 * Write previously buffered echo (and other ldisc-generated) 611 * characters to the tty. 612 * 613 * Characters generated by the ldisc (including echoes) need to 614 * be buffered because the driver's write buffer can fill during 615 * heavy program output. Echoing straight to the driver will 616 * often fail under these conditions, causing lost characters and 617 * resulting mismatches of ldisc state information. 618 * 619 * Since the ldisc state must represent the characters actually sent 620 * to the driver at the time of the write, operations like certain 621 * changes in column state are also saved in the buffer and executed 622 * here. 623 * 624 * A circular fifo buffer is used so that the most recent characters 625 * are prioritized. Also, when control characters are echoed with a 626 * prefixed "^", the pair is treated atomically and thus not separated. 627 * 628 * Locking: callers must hold output_lock 629 */ 630 631 static size_t __process_echoes(struct tty_struct *tty) 632 { 633 struct n_tty_data *ldata = tty->disc_data; 634 int space, old_space; 635 size_t tail; 636 unsigned char c; 637 638 old_space = space = tty_write_room(tty); 639 640 tail = ldata->echo_tail; 641 while (ldata->echo_commit != tail) { 642 c = echo_buf(ldata, tail); 643 if (c == ECHO_OP_START) { 644 unsigned char op; 645 int no_space_left = 0; 646 647 /* 648 * If the buffer byte is the start of a multi-byte 649 * operation, get the next byte, which is either the 650 * op code or a control character value. 651 */ 652 op = echo_buf(ldata, tail + 1); 653 654 switch (op) { 655 unsigned int num_chars, num_bs; 656 657 case ECHO_OP_ERASE_TAB: 658 num_chars = echo_buf(ldata, tail + 2); 659 660 /* 661 * Determine how many columns to go back 662 * in order to erase the tab. 663 * This depends on the number of columns 664 * used by other characters within the tab 665 * area. If this (modulo 8) count is from 666 * the start of input rather than from a 667 * previous tab, we offset by canon column. 668 * Otherwise, tab spacing is normal. 669 */ 670 if (!(num_chars & 0x80)) 671 num_chars += ldata->canon_column; 672 num_bs = 8 - (num_chars & 7); 673 674 if (num_bs > space) { 675 no_space_left = 1; 676 break; 677 } 678 space -= num_bs; 679 while (num_bs--) { 680 tty_put_char(tty, '\b'); 681 if (ldata->column > 0) 682 ldata->column--; 683 } 684 tail += 3; 685 break; 686 687 case ECHO_OP_SET_CANON_COL: 688 ldata->canon_column = ldata->column; 689 tail += 2; 690 break; 691 692 case ECHO_OP_MOVE_BACK_COL: 693 if (ldata->column > 0) 694 ldata->column--; 695 tail += 2; 696 break; 697 698 case ECHO_OP_START: 699 /* This is an escaped echo op start code */ 700 if (!space) { 701 no_space_left = 1; 702 break; 703 } 704 tty_put_char(tty, ECHO_OP_START); 705 ldata->column++; 706 space--; 707 tail += 2; 708 break; 709 710 default: 711 /* 712 * If the op is not a special byte code, 713 * it is a ctrl char tagged to be echoed 714 * as "^X" (where X is the letter 715 * representing the control char). 716 * Note that we must ensure there is 717 * enough space for the whole ctrl pair. 718 * 719 */ 720 if (space < 2) { 721 no_space_left = 1; 722 break; 723 } 724 tty_put_char(tty, '^'); 725 tty_put_char(tty, op ^ 0100); 726 ldata->column += 2; 727 space -= 2; 728 tail += 2; 729 } 730 731 if (no_space_left) 732 break; 733 } else { 734 if (O_OPOST(tty)) { 735 int retval = do_output_char(c, tty, space); 736 if (retval < 0) 737 break; 738 space -= retval; 739 } else { 740 if (!space) 741 break; 742 tty_put_char(tty, c); 743 space -= 1; 744 } 745 tail += 1; 746 } 747 } 748 749 /* If the echo buffer is nearly full (so that the possibility exists 750 * of echo overrun before the next commit), then discard enough 751 * data at the tail to prevent a subsequent overrun */ 752 while (ldata->echo_commit - tail >= ECHO_DISCARD_WATERMARK) { 753 if (echo_buf(ldata, tail) == ECHO_OP_START) { 754 if (echo_buf(ldata, tail + 1) == ECHO_OP_ERASE_TAB) 755 tail += 3; 756 else 757 tail += 2; 758 } else 759 tail++; 760 } 761 762 ldata->echo_tail = tail; 763 return old_space - space; 764 } 765 766 static void commit_echoes(struct tty_struct *tty) 767 { 768 struct n_tty_data *ldata = tty->disc_data; 769 size_t nr, old, echoed; 770 size_t head; 771 772 head = ldata->echo_head; 773 ldata->echo_mark = head; 774 old = ldata->echo_commit - ldata->echo_tail; 775 776 /* Process committed echoes if the accumulated # of bytes 777 * is over the threshold (and try again each time another 778 * block is accumulated) */ 779 nr = head - ldata->echo_tail; 780 if (nr < ECHO_COMMIT_WATERMARK || (nr % ECHO_BLOCK > old % ECHO_BLOCK)) 781 return; 782 783 mutex_lock(&ldata->output_lock); 784 ldata->echo_commit = head; 785 echoed = __process_echoes(tty); 786 mutex_unlock(&ldata->output_lock); 787 788 if (echoed && tty->ops->flush_chars) 789 tty->ops->flush_chars(tty); 790 } 791 792 static void process_echoes(struct tty_struct *tty) 793 { 794 struct n_tty_data *ldata = tty->disc_data; 795 size_t echoed; 796 797 if (ldata->echo_mark == ldata->echo_tail) 798 return; 799 800 mutex_lock(&ldata->output_lock); 801 ldata->echo_commit = ldata->echo_mark; 802 echoed = __process_echoes(tty); 803 mutex_unlock(&ldata->output_lock); 804 805 if (echoed && tty->ops->flush_chars) 806 tty->ops->flush_chars(tty); 807 } 808 809 /* NB: echo_mark and echo_head should be equivalent here */ 810 static void flush_echoes(struct tty_struct *tty) 811 { 812 struct n_tty_data *ldata = tty->disc_data; 813 814 if ((!L_ECHO(tty) && !L_ECHONL(tty)) || 815 ldata->echo_commit == ldata->echo_head) 816 return; 817 818 mutex_lock(&ldata->output_lock); 819 ldata->echo_commit = ldata->echo_head; 820 __process_echoes(tty); 821 mutex_unlock(&ldata->output_lock); 822 } 823 824 /** 825 * add_echo_byte - add a byte to the echo buffer 826 * @c: unicode byte to echo 827 * @ldata: n_tty data 828 * 829 * Add a character or operation byte to the echo buffer. 830 */ 831 832 static inline void add_echo_byte(unsigned char c, struct n_tty_data *ldata) 833 { 834 *echo_buf_addr(ldata, ldata->echo_head++) = c; 835 } 836 837 /** 838 * echo_move_back_col - add operation to move back a column 839 * @ldata: n_tty data 840 * 841 * Add an operation to the echo buffer to move back one column. 842 */ 843 844 static void echo_move_back_col(struct n_tty_data *ldata) 845 { 846 add_echo_byte(ECHO_OP_START, ldata); 847 add_echo_byte(ECHO_OP_MOVE_BACK_COL, ldata); 848 } 849 850 /** 851 * echo_set_canon_col - add operation to set the canon column 852 * @ldata: n_tty data 853 * 854 * Add an operation to the echo buffer to set the canon column 855 * to the current column. 856 */ 857 858 static void echo_set_canon_col(struct n_tty_data *ldata) 859 { 860 add_echo_byte(ECHO_OP_START, ldata); 861 add_echo_byte(ECHO_OP_SET_CANON_COL, ldata); 862 } 863 864 /** 865 * echo_erase_tab - add operation to erase a tab 866 * @num_chars: number of character columns already used 867 * @after_tab: true if num_chars starts after a previous tab 868 * @ldata: n_tty data 869 * 870 * Add an operation to the echo buffer to erase a tab. 871 * 872 * Called by the eraser function, which knows how many character 873 * columns have been used since either a previous tab or the start 874 * of input. This information will be used later, along with 875 * canon column (if applicable), to go back the correct number 876 * of columns. 877 */ 878 879 static void echo_erase_tab(unsigned int num_chars, int after_tab, 880 struct n_tty_data *ldata) 881 { 882 add_echo_byte(ECHO_OP_START, ldata); 883 add_echo_byte(ECHO_OP_ERASE_TAB, ldata); 884 885 /* We only need to know this modulo 8 (tab spacing) */ 886 num_chars &= 7; 887 888 /* Set the high bit as a flag if num_chars is after a previous tab */ 889 if (after_tab) 890 num_chars |= 0x80; 891 892 add_echo_byte(num_chars, ldata); 893 } 894 895 /** 896 * echo_char_raw - echo a character raw 897 * @c: unicode byte to echo 898 * @tty: terminal device 899 * 900 * Echo user input back onto the screen. This must be called only when 901 * L_ECHO(tty) is true. Called from the driver receive_buf path. 902 * 903 * This variant does not treat control characters specially. 904 */ 905 906 static void echo_char_raw(unsigned char c, struct n_tty_data *ldata) 907 { 908 if (c == ECHO_OP_START) { 909 add_echo_byte(ECHO_OP_START, ldata); 910 add_echo_byte(ECHO_OP_START, ldata); 911 } else { 912 add_echo_byte(c, ldata); 913 } 914 } 915 916 /** 917 * echo_char - echo a character 918 * @c: unicode byte to echo 919 * @tty: terminal device 920 * 921 * Echo user input back onto the screen. This must be called only when 922 * L_ECHO(tty) is true. Called from the driver receive_buf path. 923 * 924 * This variant tags control characters to be echoed as "^X" 925 * (where X is the letter representing the control char). 926 */ 927 928 static void echo_char(unsigned char c, struct tty_struct *tty) 929 { 930 struct n_tty_data *ldata = tty->disc_data; 931 932 if (c == ECHO_OP_START) { 933 add_echo_byte(ECHO_OP_START, ldata); 934 add_echo_byte(ECHO_OP_START, ldata); 935 } else { 936 if (L_ECHOCTL(tty) && iscntrl(c) && c != '\t') 937 add_echo_byte(ECHO_OP_START, ldata); 938 add_echo_byte(c, ldata); 939 } 940 } 941 942 /** 943 * finish_erasing - complete erase 944 * @ldata: n_tty data 945 */ 946 947 static inline void finish_erasing(struct n_tty_data *ldata) 948 { 949 if (ldata->erasing) { 950 echo_char_raw('/', ldata); 951 ldata->erasing = 0; 952 } 953 } 954 955 /** 956 * eraser - handle erase function 957 * @c: character input 958 * @tty: terminal device 959 * 960 * Perform erase and necessary output when an erase character is 961 * present in the stream from the driver layer. Handles the complexities 962 * of UTF-8 multibyte symbols. 963 * 964 * n_tty_receive_buf()/producer path: 965 * caller holds non-exclusive termios_rwsem 966 */ 967 968 static void eraser(unsigned char c, struct tty_struct *tty) 969 { 970 struct n_tty_data *ldata = tty->disc_data; 971 enum { ERASE, WERASE, KILL } kill_type; 972 size_t head; 973 size_t cnt; 974 int seen_alnums; 975 976 if (ldata->read_head == ldata->canon_head) { 977 /* process_output('\a', tty); */ /* what do you think? */ 978 return; 979 } 980 if (c == ERASE_CHAR(tty)) 981 kill_type = ERASE; 982 else if (c == WERASE_CHAR(tty)) 983 kill_type = WERASE; 984 else { 985 if (!L_ECHO(tty)) { 986 ldata->read_head = ldata->canon_head; 987 return; 988 } 989 if (!L_ECHOK(tty) || !L_ECHOKE(tty) || !L_ECHOE(tty)) { 990 ldata->read_head = ldata->canon_head; 991 finish_erasing(ldata); 992 echo_char(KILL_CHAR(tty), tty); 993 /* Add a newline if ECHOK is on and ECHOKE is off. */ 994 if (L_ECHOK(tty)) 995 echo_char_raw('\n', ldata); 996 return; 997 } 998 kill_type = KILL; 999 } 1000 1001 seen_alnums = 0; 1002 while (ldata->read_head != ldata->canon_head) { 1003 head = ldata->read_head; 1004 1005 /* erase a single possibly multibyte character */ 1006 do { 1007 head--; 1008 c = read_buf(ldata, head); 1009 } while (is_continuation(c, tty) && head != ldata->canon_head); 1010 1011 /* do not partially erase */ 1012 if (is_continuation(c, tty)) 1013 break; 1014 1015 if (kill_type == WERASE) { 1016 /* Equivalent to BSD's ALTWERASE. */ 1017 if (isalnum(c) || c == '_') 1018 seen_alnums++; 1019 else if (seen_alnums) 1020 break; 1021 } 1022 cnt = ldata->read_head - head; 1023 ldata->read_head = head; 1024 if (L_ECHO(tty)) { 1025 if (L_ECHOPRT(tty)) { 1026 if (!ldata->erasing) { 1027 echo_char_raw('\\', ldata); 1028 ldata->erasing = 1; 1029 } 1030 /* if cnt > 1, output a multi-byte character */ 1031 echo_char(c, tty); 1032 while (--cnt > 0) { 1033 head++; 1034 echo_char_raw(read_buf(ldata, head), ldata); 1035 echo_move_back_col(ldata); 1036 } 1037 } else if (kill_type == ERASE && !L_ECHOE(tty)) { 1038 echo_char(ERASE_CHAR(tty), tty); 1039 } else if (c == '\t') { 1040 unsigned int num_chars = 0; 1041 int after_tab = 0; 1042 size_t tail = ldata->read_head; 1043 1044 /* 1045 * Count the columns used for characters 1046 * since the start of input or after a 1047 * previous tab. 1048 * This info is used to go back the correct 1049 * number of columns. 1050 */ 1051 while (tail != ldata->canon_head) { 1052 tail--; 1053 c = read_buf(ldata, tail); 1054 if (c == '\t') { 1055 after_tab = 1; 1056 break; 1057 } else if (iscntrl(c)) { 1058 if (L_ECHOCTL(tty)) 1059 num_chars += 2; 1060 } else if (!is_continuation(c, tty)) { 1061 num_chars++; 1062 } 1063 } 1064 echo_erase_tab(num_chars, after_tab, ldata); 1065 } else { 1066 if (iscntrl(c) && L_ECHOCTL(tty)) { 1067 echo_char_raw('\b', ldata); 1068 echo_char_raw(' ', ldata); 1069 echo_char_raw('\b', ldata); 1070 } 1071 if (!iscntrl(c) || L_ECHOCTL(tty)) { 1072 echo_char_raw('\b', ldata); 1073 echo_char_raw(' ', ldata); 1074 echo_char_raw('\b', ldata); 1075 } 1076 } 1077 } 1078 if (kill_type == ERASE) 1079 break; 1080 } 1081 if (ldata->read_head == ldata->canon_head && L_ECHO(tty)) 1082 finish_erasing(ldata); 1083 } 1084 1085 /** 1086 * isig - handle the ISIG optio 1087 * @sig: signal 1088 * @tty: terminal 1089 * 1090 * Called when a signal is being sent due to terminal input. 1091 * Called from the driver receive_buf path so serialized. 1092 * 1093 * Performs input and output flush if !NOFLSH. In this context, the echo 1094 * buffer is 'output'. The signal is processed first to alert any current 1095 * readers or writers to discontinue and exit their i/o loops. 1096 * 1097 * Locking: ctrl_lock 1098 */ 1099 1100 static void isig(int sig, struct tty_struct *tty) 1101 { 1102 struct n_tty_data *ldata = tty->disc_data; 1103 struct pid *tty_pgrp = tty_get_pgrp(tty); 1104 if (tty_pgrp) { 1105 kill_pgrp(tty_pgrp, sig, 1); 1106 put_pid(tty_pgrp); 1107 } 1108 1109 if (!L_NOFLSH(tty)) { 1110 up_read(&tty->termios_rwsem); 1111 down_write(&tty->termios_rwsem); 1112 1113 /* clear echo buffer */ 1114 mutex_lock(&ldata->output_lock); 1115 ldata->echo_head = ldata->echo_tail = 0; 1116 ldata->echo_mark = ldata->echo_commit = 0; 1117 mutex_unlock(&ldata->output_lock); 1118 1119 /* clear output buffer */ 1120 tty_driver_flush_buffer(tty); 1121 1122 /* clear input buffer */ 1123 reset_buffer_flags(tty->disc_data); 1124 1125 /* notify pty master of flush */ 1126 if (tty->link) 1127 n_tty_packet_mode_flush(tty); 1128 1129 up_write(&tty->termios_rwsem); 1130 down_read(&tty->termios_rwsem); 1131 } 1132 } 1133 1134 /** 1135 * n_tty_receive_break - handle break 1136 * @tty: terminal 1137 * 1138 * An RS232 break event has been hit in the incoming bitstream. This 1139 * can cause a variety of events depending upon the termios settings. 1140 * 1141 * n_tty_receive_buf()/producer path: 1142 * caller holds non-exclusive termios_rwsem 1143 * 1144 * Note: may get exclusive termios_rwsem if flushing input buffer 1145 */ 1146 1147 static void n_tty_receive_break(struct tty_struct *tty) 1148 { 1149 struct n_tty_data *ldata = tty->disc_data; 1150 1151 if (I_IGNBRK(tty)) 1152 return; 1153 if (I_BRKINT(tty)) { 1154 isig(SIGINT, tty); 1155 return; 1156 } 1157 if (I_PARMRK(tty)) { 1158 put_tty_queue('\377', ldata); 1159 put_tty_queue('\0', ldata); 1160 } 1161 put_tty_queue('\0', ldata); 1162 if (waitqueue_active(&tty->read_wait)) 1163 wake_up_interruptible_poll(&tty->read_wait, POLLIN); 1164 } 1165 1166 /** 1167 * n_tty_receive_overrun - handle overrun reporting 1168 * @tty: terminal 1169 * 1170 * Data arrived faster than we could process it. While the tty 1171 * driver has flagged this the bits that were missed are gone 1172 * forever. 1173 * 1174 * Called from the receive_buf path so single threaded. Does not 1175 * need locking as num_overrun and overrun_time are function 1176 * private. 1177 */ 1178 1179 static void n_tty_receive_overrun(struct tty_struct *tty) 1180 { 1181 struct n_tty_data *ldata = tty->disc_data; 1182 char buf[64]; 1183 1184 ldata->num_overrun++; 1185 if (time_after(jiffies, ldata->overrun_time + HZ) || 1186 time_after(ldata->overrun_time, jiffies)) { 1187 printk(KERN_WARNING "%s: %d input overrun(s)\n", 1188 tty_name(tty, buf), 1189 ldata->num_overrun); 1190 ldata->overrun_time = jiffies; 1191 ldata->num_overrun = 0; 1192 } 1193 } 1194 1195 /** 1196 * n_tty_receive_parity_error - error notifier 1197 * @tty: terminal device 1198 * @c: character 1199 * 1200 * Process a parity error and queue the right data to indicate 1201 * the error case if necessary. 1202 * 1203 * n_tty_receive_buf()/producer path: 1204 * caller holds non-exclusive termios_rwsem 1205 */ 1206 static void n_tty_receive_parity_error(struct tty_struct *tty, unsigned char c) 1207 { 1208 struct n_tty_data *ldata = tty->disc_data; 1209 1210 if (I_INPCK(tty)) { 1211 if (I_IGNPAR(tty)) 1212 return; 1213 if (I_PARMRK(tty)) { 1214 put_tty_queue('\377', ldata); 1215 put_tty_queue('\0', ldata); 1216 put_tty_queue(c, ldata); 1217 } else 1218 put_tty_queue('\0', ldata); 1219 } else 1220 put_tty_queue(c, ldata); 1221 if (waitqueue_active(&tty->read_wait)) 1222 wake_up_interruptible_poll(&tty->read_wait, POLLIN); 1223 } 1224 1225 static void 1226 n_tty_receive_signal_char(struct tty_struct *tty, int signal, unsigned char c) 1227 { 1228 isig(signal, tty); 1229 if (I_IXON(tty)) 1230 start_tty(tty); 1231 if (L_ECHO(tty)) { 1232 echo_char(c, tty); 1233 commit_echoes(tty); 1234 } else 1235 process_echoes(tty); 1236 return; 1237 } 1238 1239 /** 1240 * n_tty_receive_char - perform processing 1241 * @tty: terminal device 1242 * @c: character 1243 * 1244 * Process an individual character of input received from the driver. 1245 * This is serialized with respect to itself by the rules for the 1246 * driver above. 1247 * 1248 * n_tty_receive_buf()/producer path: 1249 * caller holds non-exclusive termios_rwsem 1250 * publishes canon_head if canonical mode is active 1251 * 1252 * Returns 1 if LNEXT was received, else returns 0 1253 */ 1254 1255 static int 1256 n_tty_receive_char_special(struct tty_struct *tty, unsigned char c) 1257 { 1258 struct n_tty_data *ldata = tty->disc_data; 1259 1260 if (I_IXON(tty)) { 1261 if (c == START_CHAR(tty)) { 1262 start_tty(tty); 1263 process_echoes(tty); 1264 return 0; 1265 } 1266 if (c == STOP_CHAR(tty)) { 1267 stop_tty(tty); 1268 return 0; 1269 } 1270 } 1271 1272 if (L_ISIG(tty)) { 1273 if (c == INTR_CHAR(tty)) { 1274 n_tty_receive_signal_char(tty, SIGINT, c); 1275 return 0; 1276 } else if (c == QUIT_CHAR(tty)) { 1277 n_tty_receive_signal_char(tty, SIGQUIT, c); 1278 return 0; 1279 } else if (c == SUSP_CHAR(tty)) { 1280 n_tty_receive_signal_char(tty, SIGTSTP, c); 1281 return 0; 1282 } 1283 } 1284 1285 if (tty->stopped && !tty->flow_stopped && I_IXON(tty) && I_IXANY(tty)) { 1286 start_tty(tty); 1287 process_echoes(tty); 1288 } 1289 1290 if (c == '\r') { 1291 if (I_IGNCR(tty)) 1292 return 0; 1293 if (I_ICRNL(tty)) 1294 c = '\n'; 1295 } else if (c == '\n' && I_INLCR(tty)) 1296 c = '\r'; 1297 1298 if (ldata->icanon) { 1299 if (c == ERASE_CHAR(tty) || c == KILL_CHAR(tty) || 1300 (c == WERASE_CHAR(tty) && L_IEXTEN(tty))) { 1301 eraser(c, tty); 1302 commit_echoes(tty); 1303 return 0; 1304 } 1305 if (c == LNEXT_CHAR(tty) && L_IEXTEN(tty)) { 1306 ldata->lnext = 1; 1307 if (L_ECHO(tty)) { 1308 finish_erasing(ldata); 1309 if (L_ECHOCTL(tty)) { 1310 echo_char_raw('^', ldata); 1311 echo_char_raw('\b', ldata); 1312 commit_echoes(tty); 1313 } 1314 } 1315 return 1; 1316 } 1317 if (c == REPRINT_CHAR(tty) && L_ECHO(tty) && L_IEXTEN(tty)) { 1318 size_t tail = ldata->canon_head; 1319 1320 finish_erasing(ldata); 1321 echo_char(c, tty); 1322 echo_char_raw('\n', ldata); 1323 while (tail != ldata->read_head) { 1324 echo_char(read_buf(ldata, tail), tty); 1325 tail++; 1326 } 1327 commit_echoes(tty); 1328 return 0; 1329 } 1330 if (c == '\n') { 1331 if (L_ECHO(tty) || L_ECHONL(tty)) { 1332 echo_char_raw('\n', ldata); 1333 commit_echoes(tty); 1334 } 1335 goto handle_newline; 1336 } 1337 if (c == EOF_CHAR(tty)) { 1338 c = __DISABLED_CHAR; 1339 goto handle_newline; 1340 } 1341 if ((c == EOL_CHAR(tty)) || 1342 (c == EOL2_CHAR(tty) && L_IEXTEN(tty))) { 1343 /* 1344 * XXX are EOL_CHAR and EOL2_CHAR echoed?!? 1345 */ 1346 if (L_ECHO(tty)) { 1347 /* Record the column of first canon char. */ 1348 if (ldata->canon_head == ldata->read_head) 1349 echo_set_canon_col(ldata); 1350 echo_char(c, tty); 1351 commit_echoes(tty); 1352 } 1353 /* 1354 * XXX does PARMRK doubling happen for 1355 * EOL_CHAR and EOL2_CHAR? 1356 */ 1357 if (c == (unsigned char) '\377' && I_PARMRK(tty)) 1358 put_tty_queue(c, ldata); 1359 1360 handle_newline: 1361 set_bit(ldata->read_head & (N_TTY_BUF_SIZE - 1), ldata->read_flags); 1362 put_tty_queue(c, ldata); 1363 smp_store_release(&ldata->canon_head, ldata->read_head); 1364 kill_fasync(&tty->fasync, SIGIO, POLL_IN); 1365 if (waitqueue_active(&tty->read_wait)) 1366 wake_up_interruptible_poll(&tty->read_wait, POLLIN); 1367 return 0; 1368 } 1369 } 1370 1371 if (L_ECHO(tty)) { 1372 finish_erasing(ldata); 1373 if (c == '\n') 1374 echo_char_raw('\n', ldata); 1375 else { 1376 /* Record the column of first canon char. */ 1377 if (ldata->canon_head == ldata->read_head) 1378 echo_set_canon_col(ldata); 1379 echo_char(c, tty); 1380 } 1381 commit_echoes(tty); 1382 } 1383 1384 /* PARMRK doubling check */ 1385 if (c == (unsigned char) '\377' && I_PARMRK(tty)) 1386 put_tty_queue(c, ldata); 1387 1388 put_tty_queue(c, ldata); 1389 return 0; 1390 } 1391 1392 static inline void 1393 n_tty_receive_char_inline(struct tty_struct *tty, unsigned char c) 1394 { 1395 struct n_tty_data *ldata = tty->disc_data; 1396 1397 if (tty->stopped && !tty->flow_stopped && I_IXON(tty) && I_IXANY(tty)) { 1398 start_tty(tty); 1399 process_echoes(tty); 1400 } 1401 if (L_ECHO(tty)) { 1402 finish_erasing(ldata); 1403 /* Record the column of first canon char. */ 1404 if (ldata->canon_head == ldata->read_head) 1405 echo_set_canon_col(ldata); 1406 echo_char(c, tty); 1407 commit_echoes(tty); 1408 } 1409 /* PARMRK doubling check */ 1410 if (c == (unsigned char) '\377' && I_PARMRK(tty)) 1411 put_tty_queue(c, ldata); 1412 put_tty_queue(c, ldata); 1413 } 1414 1415 static void n_tty_receive_char(struct tty_struct *tty, unsigned char c) 1416 { 1417 n_tty_receive_char_inline(tty, c); 1418 } 1419 1420 static inline void 1421 n_tty_receive_char_fast(struct tty_struct *tty, unsigned char c) 1422 { 1423 struct n_tty_data *ldata = tty->disc_data; 1424 1425 if (tty->stopped && !tty->flow_stopped && I_IXON(tty) && I_IXANY(tty)) { 1426 start_tty(tty); 1427 process_echoes(tty); 1428 } 1429 if (L_ECHO(tty)) { 1430 finish_erasing(ldata); 1431 /* Record the column of first canon char. */ 1432 if (ldata->canon_head == ldata->read_head) 1433 echo_set_canon_col(ldata); 1434 echo_char(c, tty); 1435 commit_echoes(tty); 1436 } 1437 put_tty_queue(c, ldata); 1438 } 1439 1440 static void n_tty_receive_char_closing(struct tty_struct *tty, unsigned char c) 1441 { 1442 if (I_ISTRIP(tty)) 1443 c &= 0x7f; 1444 if (I_IUCLC(tty) && L_IEXTEN(tty)) 1445 c = tolower(c); 1446 1447 if (I_IXON(tty)) { 1448 if (c == STOP_CHAR(tty)) 1449 stop_tty(tty); 1450 else if (c == START_CHAR(tty) || 1451 (tty->stopped && !tty->flow_stopped && I_IXANY(tty) && 1452 c != INTR_CHAR(tty) && c != QUIT_CHAR(tty) && 1453 c != SUSP_CHAR(tty))) { 1454 start_tty(tty); 1455 process_echoes(tty); 1456 } 1457 } 1458 } 1459 1460 static void 1461 n_tty_receive_char_flagged(struct tty_struct *tty, unsigned char c, char flag) 1462 { 1463 char buf[64]; 1464 1465 switch (flag) { 1466 case TTY_BREAK: 1467 n_tty_receive_break(tty); 1468 break; 1469 case TTY_PARITY: 1470 case TTY_FRAME: 1471 n_tty_receive_parity_error(tty, c); 1472 break; 1473 case TTY_OVERRUN: 1474 n_tty_receive_overrun(tty); 1475 break; 1476 default: 1477 printk(KERN_ERR "%s: unknown flag %d\n", 1478 tty_name(tty, buf), flag); 1479 break; 1480 } 1481 } 1482 1483 static void 1484 n_tty_receive_char_lnext(struct tty_struct *tty, unsigned char c, char flag) 1485 { 1486 struct n_tty_data *ldata = tty->disc_data; 1487 1488 ldata->lnext = 0; 1489 if (likely(flag == TTY_NORMAL)) { 1490 if (I_ISTRIP(tty)) 1491 c &= 0x7f; 1492 if (I_IUCLC(tty) && L_IEXTEN(tty)) 1493 c = tolower(c); 1494 n_tty_receive_char(tty, c); 1495 } else 1496 n_tty_receive_char_flagged(tty, c, flag); 1497 } 1498 1499 static void 1500 n_tty_receive_buf_real_raw(struct tty_struct *tty, const unsigned char *cp, 1501 char *fp, int count) 1502 { 1503 struct n_tty_data *ldata = tty->disc_data; 1504 size_t n, head; 1505 1506 head = ldata->read_head & (N_TTY_BUF_SIZE - 1); 1507 n = min_t(size_t, count, N_TTY_BUF_SIZE - head); 1508 memcpy(read_buf_addr(ldata, head), cp, n); 1509 ldata->read_head += n; 1510 cp += n; 1511 count -= n; 1512 1513 head = ldata->read_head & (N_TTY_BUF_SIZE - 1); 1514 n = min_t(size_t, count, N_TTY_BUF_SIZE - head); 1515 memcpy(read_buf_addr(ldata, head), cp, n); 1516 ldata->read_head += n; 1517 } 1518 1519 static void 1520 n_tty_receive_buf_raw(struct tty_struct *tty, const unsigned char *cp, 1521 char *fp, int count) 1522 { 1523 struct n_tty_data *ldata = tty->disc_data; 1524 char flag = TTY_NORMAL; 1525 1526 while (count--) { 1527 if (fp) 1528 flag = *fp++; 1529 if (likely(flag == TTY_NORMAL)) 1530 put_tty_queue(*cp++, ldata); 1531 else 1532 n_tty_receive_char_flagged(tty, *cp++, flag); 1533 } 1534 } 1535 1536 static void 1537 n_tty_receive_buf_closing(struct tty_struct *tty, const unsigned char *cp, 1538 char *fp, int count) 1539 { 1540 char flag = TTY_NORMAL; 1541 1542 while (count--) { 1543 if (fp) 1544 flag = *fp++; 1545 if (likely(flag == TTY_NORMAL)) 1546 n_tty_receive_char_closing(tty, *cp++); 1547 else 1548 n_tty_receive_char_flagged(tty, *cp++, flag); 1549 } 1550 } 1551 1552 static void 1553 n_tty_receive_buf_standard(struct tty_struct *tty, const unsigned char *cp, 1554 char *fp, int count) 1555 { 1556 struct n_tty_data *ldata = tty->disc_data; 1557 char flag = TTY_NORMAL; 1558 1559 while (count--) { 1560 if (fp) 1561 flag = *fp++; 1562 if (likely(flag == TTY_NORMAL)) { 1563 unsigned char c = *cp++; 1564 1565 if (I_ISTRIP(tty)) 1566 c &= 0x7f; 1567 if (I_IUCLC(tty) && L_IEXTEN(tty)) 1568 c = tolower(c); 1569 if (L_EXTPROC(tty)) { 1570 put_tty_queue(c, ldata); 1571 continue; 1572 } 1573 if (!test_bit(c, ldata->char_map)) 1574 n_tty_receive_char_inline(tty, c); 1575 else if (n_tty_receive_char_special(tty, c) && count) { 1576 if (fp) 1577 flag = *fp++; 1578 n_tty_receive_char_lnext(tty, *cp++, flag); 1579 count--; 1580 } 1581 } else 1582 n_tty_receive_char_flagged(tty, *cp++, flag); 1583 } 1584 } 1585 1586 static void 1587 n_tty_receive_buf_fast(struct tty_struct *tty, const unsigned char *cp, 1588 char *fp, int count) 1589 { 1590 struct n_tty_data *ldata = tty->disc_data; 1591 char flag = TTY_NORMAL; 1592 1593 while (count--) { 1594 if (fp) 1595 flag = *fp++; 1596 if (likely(flag == TTY_NORMAL)) { 1597 unsigned char c = *cp++; 1598 1599 if (!test_bit(c, ldata->char_map)) 1600 n_tty_receive_char_fast(tty, c); 1601 else if (n_tty_receive_char_special(tty, c) && count) { 1602 if (fp) 1603 flag = *fp++; 1604 n_tty_receive_char_lnext(tty, *cp++, flag); 1605 count--; 1606 } 1607 } else 1608 n_tty_receive_char_flagged(tty, *cp++, flag); 1609 } 1610 } 1611 1612 static void __receive_buf(struct tty_struct *tty, const unsigned char *cp, 1613 char *fp, int count) 1614 { 1615 struct n_tty_data *ldata = tty->disc_data; 1616 bool preops = I_ISTRIP(tty) || (I_IUCLC(tty) && L_IEXTEN(tty)); 1617 1618 if (ldata->real_raw) 1619 n_tty_receive_buf_real_raw(tty, cp, fp, count); 1620 else if (ldata->raw || (L_EXTPROC(tty) && !preops)) 1621 n_tty_receive_buf_raw(tty, cp, fp, count); 1622 else if (tty->closing && !L_EXTPROC(tty)) 1623 n_tty_receive_buf_closing(tty, cp, fp, count); 1624 else { 1625 if (ldata->lnext) { 1626 char flag = TTY_NORMAL; 1627 1628 if (fp) 1629 flag = *fp++; 1630 n_tty_receive_char_lnext(tty, *cp++, flag); 1631 count--; 1632 } 1633 1634 if (!preops && !I_PARMRK(tty)) 1635 n_tty_receive_buf_fast(tty, cp, fp, count); 1636 else 1637 n_tty_receive_buf_standard(tty, cp, fp, count); 1638 1639 flush_echoes(tty); 1640 if (tty->ops->flush_chars) 1641 tty->ops->flush_chars(tty); 1642 } 1643 1644 if (ldata->icanon && !L_EXTPROC(tty)) 1645 return; 1646 1647 /* publish read_head to consumer */ 1648 smp_store_release(&ldata->commit_head, ldata->read_head); 1649 1650 if ((read_cnt(ldata) >= ldata->minimum_to_wake) || L_EXTPROC(tty)) { 1651 kill_fasync(&tty->fasync, SIGIO, POLL_IN); 1652 if (waitqueue_active(&tty->read_wait)) 1653 wake_up_interruptible_poll(&tty->read_wait, POLLIN); 1654 } 1655 } 1656 1657 /** 1658 * n_tty_receive_buf_common - process input 1659 * @tty: device to receive input 1660 * @cp: input chars 1661 * @fp: flags for each char (if NULL, all chars are TTY_NORMAL) 1662 * @count: number of input chars in @cp 1663 * 1664 * Called by the terminal driver when a block of characters has 1665 * been received. This function must be called from soft contexts 1666 * not from interrupt context. The driver is responsible for making 1667 * calls one at a time and in order (or using flush_to_ldisc) 1668 * 1669 * Returns the # of input chars from @cp which were processed. 1670 * 1671 * In canonical mode, the maximum line length is 4096 chars (including 1672 * the line termination char); lines longer than 4096 chars are 1673 * truncated. After 4095 chars, input data is still processed but 1674 * not stored. Overflow processing ensures the tty can always 1675 * receive more input until at least one line can be read. 1676 * 1677 * In non-canonical mode, the read buffer will only accept 4095 chars; 1678 * this provides the necessary space for a newline char if the input 1679 * mode is switched to canonical. 1680 * 1681 * Note it is possible for the read buffer to _contain_ 4096 chars 1682 * in non-canonical mode: the read buffer could already contain the 1683 * maximum canon line of 4096 chars when the mode is switched to 1684 * non-canonical. 1685 * 1686 * n_tty_receive_buf()/producer path: 1687 * claims non-exclusive termios_rwsem 1688 * publishes commit_head or canon_head 1689 */ 1690 static int 1691 n_tty_receive_buf_common(struct tty_struct *tty, const unsigned char *cp, 1692 char *fp, int count, int flow) 1693 { 1694 struct n_tty_data *ldata = tty->disc_data; 1695 int room, n, rcvd = 0, overflow; 1696 1697 down_read(&tty->termios_rwsem); 1698 1699 while (1) { 1700 /* 1701 * When PARMRK is set, each input char may take up to 3 chars 1702 * in the read buf; reduce the buffer space avail by 3x 1703 * 1704 * If we are doing input canonicalization, and there are no 1705 * pending newlines, let characters through without limit, so 1706 * that erase characters will be handled. Other excess 1707 * characters will be beeped. 1708 * 1709 * paired with store in *_copy_from_read_buf() -- guarantees 1710 * the consumer has loaded the data in read_buf up to the new 1711 * read_tail (so this producer will not overwrite unread data) 1712 */ 1713 size_t tail = smp_load_acquire(&ldata->read_tail); 1714 1715 room = N_TTY_BUF_SIZE - (ldata->read_head - tail); 1716 if (I_PARMRK(tty)) 1717 room = (room + 2) / 3; 1718 room--; 1719 if (room <= 0) { 1720 overflow = ldata->icanon && ldata->canon_head == tail; 1721 if (overflow && room < 0) 1722 ldata->read_head--; 1723 room = overflow; 1724 ldata->no_room = flow && !room; 1725 } else 1726 overflow = 0; 1727 1728 n = min(count, room); 1729 if (!n) 1730 break; 1731 1732 /* ignore parity errors if handling overflow */ 1733 if (!overflow || !fp || *fp != TTY_PARITY) 1734 __receive_buf(tty, cp, fp, n); 1735 1736 cp += n; 1737 if (fp) 1738 fp += n; 1739 count -= n; 1740 rcvd += n; 1741 } 1742 1743 tty->receive_room = room; 1744 1745 /* Unthrottle if handling overflow on pty */ 1746 if (tty->driver->type == TTY_DRIVER_TYPE_PTY) { 1747 if (overflow) { 1748 tty_set_flow_change(tty, TTY_UNTHROTTLE_SAFE); 1749 tty_unthrottle_safe(tty); 1750 __tty_set_flow_change(tty, 0); 1751 } 1752 } else 1753 n_tty_check_throttle(tty); 1754 1755 up_read(&tty->termios_rwsem); 1756 1757 return rcvd; 1758 } 1759 1760 static void n_tty_receive_buf(struct tty_struct *tty, const unsigned char *cp, 1761 char *fp, int count) 1762 { 1763 n_tty_receive_buf_common(tty, cp, fp, count, 0); 1764 } 1765 1766 static int n_tty_receive_buf2(struct tty_struct *tty, const unsigned char *cp, 1767 char *fp, int count) 1768 { 1769 return n_tty_receive_buf_common(tty, cp, fp, count, 1); 1770 } 1771 1772 int is_ignored(int sig) 1773 { 1774 return (sigismember(¤t->blocked, sig) || 1775 current->sighand->action[sig-1].sa.sa_handler == SIG_IGN); 1776 } 1777 1778 /** 1779 * n_tty_set_termios - termios data changed 1780 * @tty: terminal 1781 * @old: previous data 1782 * 1783 * Called by the tty layer when the user changes termios flags so 1784 * that the line discipline can plan ahead. This function cannot sleep 1785 * and is protected from re-entry by the tty layer. The user is 1786 * guaranteed that this function will not be re-entered or in progress 1787 * when the ldisc is closed. 1788 * 1789 * Locking: Caller holds tty->termios_rwsem 1790 */ 1791 1792 static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old) 1793 { 1794 struct n_tty_data *ldata = tty->disc_data; 1795 1796 if (!old || (old->c_lflag ^ tty->termios.c_lflag) & ICANON) { 1797 bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE); 1798 ldata->line_start = ldata->read_tail; 1799 if (!L_ICANON(tty) || !read_cnt(ldata)) { 1800 ldata->canon_head = ldata->read_tail; 1801 ldata->push = 0; 1802 } else { 1803 set_bit((ldata->read_head - 1) & (N_TTY_BUF_SIZE - 1), 1804 ldata->read_flags); 1805 ldata->canon_head = ldata->read_head; 1806 ldata->push = 1; 1807 } 1808 ldata->commit_head = ldata->read_head; 1809 ldata->erasing = 0; 1810 ldata->lnext = 0; 1811 } 1812 1813 ldata->icanon = (L_ICANON(tty) != 0); 1814 1815 if (I_ISTRIP(tty) || I_IUCLC(tty) || I_IGNCR(tty) || 1816 I_ICRNL(tty) || I_INLCR(tty) || L_ICANON(tty) || 1817 I_IXON(tty) || L_ISIG(tty) || L_ECHO(tty) || 1818 I_PARMRK(tty)) { 1819 bitmap_zero(ldata->char_map, 256); 1820 1821 if (I_IGNCR(tty) || I_ICRNL(tty)) 1822 set_bit('\r', ldata->char_map); 1823 if (I_INLCR(tty)) 1824 set_bit('\n', ldata->char_map); 1825 1826 if (L_ICANON(tty)) { 1827 set_bit(ERASE_CHAR(tty), ldata->char_map); 1828 set_bit(KILL_CHAR(tty), ldata->char_map); 1829 set_bit(EOF_CHAR(tty), ldata->char_map); 1830 set_bit('\n', ldata->char_map); 1831 set_bit(EOL_CHAR(tty), ldata->char_map); 1832 if (L_IEXTEN(tty)) { 1833 set_bit(WERASE_CHAR(tty), ldata->char_map); 1834 set_bit(LNEXT_CHAR(tty), ldata->char_map); 1835 set_bit(EOL2_CHAR(tty), ldata->char_map); 1836 if (L_ECHO(tty)) 1837 set_bit(REPRINT_CHAR(tty), 1838 ldata->char_map); 1839 } 1840 } 1841 if (I_IXON(tty)) { 1842 set_bit(START_CHAR(tty), ldata->char_map); 1843 set_bit(STOP_CHAR(tty), ldata->char_map); 1844 } 1845 if (L_ISIG(tty)) { 1846 set_bit(INTR_CHAR(tty), ldata->char_map); 1847 set_bit(QUIT_CHAR(tty), ldata->char_map); 1848 set_bit(SUSP_CHAR(tty), ldata->char_map); 1849 } 1850 clear_bit(__DISABLED_CHAR, ldata->char_map); 1851 ldata->raw = 0; 1852 ldata->real_raw = 0; 1853 } else { 1854 ldata->raw = 1; 1855 if ((I_IGNBRK(tty) || (!I_BRKINT(tty) && !I_PARMRK(tty))) && 1856 (I_IGNPAR(tty) || !I_INPCK(tty)) && 1857 (tty->driver->flags & TTY_DRIVER_REAL_RAW)) 1858 ldata->real_raw = 1; 1859 else 1860 ldata->real_raw = 0; 1861 } 1862 /* 1863 * Fix tty hang when I_IXON(tty) is cleared, but the tty 1864 * been stopped by STOP_CHAR(tty) before it. 1865 */ 1866 if (!I_IXON(tty) && old && (old->c_iflag & IXON) && !tty->flow_stopped) { 1867 start_tty(tty); 1868 process_echoes(tty); 1869 } 1870 1871 /* The termios change make the tty ready for I/O */ 1872 if (waitqueue_active(&tty->write_wait)) 1873 wake_up_interruptible(&tty->write_wait); 1874 if (waitqueue_active(&tty->read_wait)) 1875 wake_up_interruptible(&tty->read_wait); 1876 } 1877 1878 /** 1879 * n_tty_close - close the ldisc for this tty 1880 * @tty: device 1881 * 1882 * Called from the terminal layer when this line discipline is 1883 * being shut down, either because of a close or becsuse of a 1884 * discipline change. The function will not be called while other 1885 * ldisc methods are in progress. 1886 */ 1887 1888 static void n_tty_close(struct tty_struct *tty) 1889 { 1890 struct n_tty_data *ldata = tty->disc_data; 1891 1892 if (tty->link) 1893 n_tty_packet_mode_flush(tty); 1894 1895 vfree(ldata); 1896 tty->disc_data = NULL; 1897 } 1898 1899 /** 1900 * n_tty_open - open an ldisc 1901 * @tty: terminal to open 1902 * 1903 * Called when this line discipline is being attached to the 1904 * terminal device. Can sleep. Called serialized so that no 1905 * other events will occur in parallel. No further open will occur 1906 * until a close. 1907 */ 1908 1909 static int n_tty_open(struct tty_struct *tty) 1910 { 1911 struct n_tty_data *ldata; 1912 1913 /* Currently a malloc failure here can panic */ 1914 ldata = vmalloc(sizeof(*ldata)); 1915 if (!ldata) 1916 goto err; 1917 1918 ldata->overrun_time = jiffies; 1919 mutex_init(&ldata->atomic_read_lock); 1920 mutex_init(&ldata->output_lock); 1921 1922 tty->disc_data = ldata; 1923 reset_buffer_flags(tty->disc_data); 1924 ldata->column = 0; 1925 ldata->canon_column = 0; 1926 ldata->minimum_to_wake = 1; 1927 ldata->num_overrun = 0; 1928 ldata->no_room = 0; 1929 ldata->lnext = 0; 1930 tty->closing = 0; 1931 /* indicate buffer work may resume */ 1932 clear_bit(TTY_LDISC_HALTED, &tty->flags); 1933 n_tty_set_termios(tty, NULL); 1934 tty_unthrottle(tty); 1935 1936 return 0; 1937 err: 1938 return -ENOMEM; 1939 } 1940 1941 static inline int input_available_p(struct tty_struct *tty, int poll) 1942 { 1943 struct n_tty_data *ldata = tty->disc_data; 1944 int amt = poll && !TIME_CHAR(tty) && MIN_CHAR(tty) ? MIN_CHAR(tty) : 1; 1945 1946 if (ldata->icanon && !L_EXTPROC(tty)) 1947 return ldata->canon_head != ldata->read_tail; 1948 else 1949 return ldata->commit_head - ldata->read_tail >= amt; 1950 } 1951 1952 /** 1953 * copy_from_read_buf - copy read data directly 1954 * @tty: terminal device 1955 * @b: user data 1956 * @nr: size of data 1957 * 1958 * Helper function to speed up n_tty_read. It is only called when 1959 * ICANON is off; it copies characters straight from the tty queue to 1960 * user space directly. It can be profitably called twice; once to 1961 * drain the space from the tail pointer to the (physical) end of the 1962 * buffer, and once to drain the space from the (physical) beginning of 1963 * the buffer to head pointer. 1964 * 1965 * Called under the ldata->atomic_read_lock sem 1966 * 1967 * n_tty_read()/consumer path: 1968 * caller holds non-exclusive termios_rwsem 1969 * read_tail published 1970 */ 1971 1972 static int copy_from_read_buf(struct tty_struct *tty, 1973 unsigned char __user **b, 1974 size_t *nr) 1975 1976 { 1977 struct n_tty_data *ldata = tty->disc_data; 1978 int retval; 1979 size_t n; 1980 bool is_eof; 1981 size_t head = smp_load_acquire(&ldata->commit_head); 1982 size_t tail = ldata->read_tail & (N_TTY_BUF_SIZE - 1); 1983 1984 retval = 0; 1985 n = min(head - ldata->read_tail, N_TTY_BUF_SIZE - tail); 1986 n = min(*nr, n); 1987 if (n) { 1988 retval = copy_to_user(*b, read_buf_addr(ldata, tail), n); 1989 n -= retval; 1990 is_eof = n == 1 && read_buf(ldata, tail) == EOF_CHAR(tty); 1991 tty_audit_add_data(tty, read_buf_addr(ldata, tail), n, 1992 ldata->icanon); 1993 smp_store_release(&ldata->read_tail, ldata->read_tail + n); 1994 /* Turn single EOF into zero-length read */ 1995 if (L_EXTPROC(tty) && ldata->icanon && is_eof && 1996 (head == ldata->read_tail)) 1997 n = 0; 1998 *b += n; 1999 *nr -= n; 2000 } 2001 return retval; 2002 } 2003 2004 /** 2005 * canon_copy_from_read_buf - copy read data in canonical mode 2006 * @tty: terminal device 2007 * @b: user data 2008 * @nr: size of data 2009 * 2010 * Helper function for n_tty_read. It is only called when ICANON is on; 2011 * it copies one line of input up to and including the line-delimiting 2012 * character into the user-space buffer. 2013 * 2014 * NB: When termios is changed from non-canonical to canonical mode and 2015 * the read buffer contains data, n_tty_set_termios() simulates an EOF 2016 * push (as if C-d were input) _without_ the DISABLED_CHAR in the buffer. 2017 * This causes data already processed as input to be immediately available 2018 * as input although a newline has not been received. 2019 * 2020 * Called under the atomic_read_lock mutex 2021 * 2022 * n_tty_read()/consumer path: 2023 * caller holds non-exclusive termios_rwsem 2024 * read_tail published 2025 */ 2026 2027 static int canon_copy_from_read_buf(struct tty_struct *tty, 2028 unsigned char __user **b, 2029 size_t *nr) 2030 { 2031 struct n_tty_data *ldata = tty->disc_data; 2032 size_t n, size, more, c; 2033 size_t eol; 2034 size_t tail; 2035 int ret, found = 0; 2036 bool eof_push = 0; 2037 2038 /* N.B. avoid overrun if nr == 0 */ 2039 n = min(*nr, smp_load_acquire(&ldata->canon_head) - ldata->read_tail); 2040 if (!n) 2041 return 0; 2042 2043 tail = ldata->read_tail & (N_TTY_BUF_SIZE - 1); 2044 size = min_t(size_t, tail + n, N_TTY_BUF_SIZE); 2045 2046 n_tty_trace("%s: nr:%zu tail:%zu n:%zu size:%zu\n", 2047 __func__, *nr, tail, n, size); 2048 2049 eol = find_next_bit(ldata->read_flags, size, tail); 2050 more = n - (size - tail); 2051 if (eol == N_TTY_BUF_SIZE && more) { 2052 /* scan wrapped without finding set bit */ 2053 eol = find_next_bit(ldata->read_flags, more, 0); 2054 if (eol != more) 2055 found = 1; 2056 } else if (eol != size) 2057 found = 1; 2058 2059 size = N_TTY_BUF_SIZE - tail; 2060 n = eol - tail; 2061 if (n > 4096) 2062 n += 4096; 2063 n += found; 2064 c = n; 2065 2066 if (found && !ldata->push && read_buf(ldata, eol) == __DISABLED_CHAR) { 2067 n--; 2068 eof_push = !n && ldata->read_tail != ldata->line_start; 2069 } 2070 2071 n_tty_trace("%s: eol:%zu found:%d n:%zu c:%zu size:%zu more:%zu\n", 2072 __func__, eol, found, n, c, size, more); 2073 2074 if (n > size) { 2075 ret = copy_to_user(*b, read_buf_addr(ldata, tail), size); 2076 if (ret) 2077 return -EFAULT; 2078 ret = copy_to_user(*b + size, ldata->read_buf, n - size); 2079 } else 2080 ret = copy_to_user(*b, read_buf_addr(ldata, tail), n); 2081 2082 if (ret) 2083 return -EFAULT; 2084 *b += n; 2085 *nr -= n; 2086 2087 if (found) 2088 clear_bit(eol, ldata->read_flags); 2089 smp_store_release(&ldata->read_tail, ldata->read_tail + c); 2090 2091 if (found) { 2092 if (!ldata->push) 2093 ldata->line_start = ldata->read_tail; 2094 else 2095 ldata->push = 0; 2096 tty_audit_push(tty); 2097 } 2098 return eof_push ? -EAGAIN : 0; 2099 } 2100 2101 extern ssize_t redirected_tty_write(struct file *, const char __user *, 2102 size_t, loff_t *); 2103 2104 /** 2105 * job_control - check job control 2106 * @tty: tty 2107 * @file: file handle 2108 * 2109 * Perform job control management checks on this file/tty descriptor 2110 * and if appropriate send any needed signals and return a negative 2111 * error code if action should be taken. 2112 * 2113 * Locking: redirected write test is safe 2114 * current->signal->tty check is safe 2115 * ctrl_lock to safely reference tty->pgrp 2116 */ 2117 2118 static int job_control(struct tty_struct *tty, struct file *file) 2119 { 2120 /* Job control check -- must be done at start and after 2121 every sleep (POSIX.1 7.1.1.4). */ 2122 /* NOTE: not yet done after every sleep pending a thorough 2123 check of the logic of this change. -- jlc */ 2124 /* don't stop on /dev/console */ 2125 if (file->f_op->write == redirected_tty_write || 2126 current->signal->tty != tty) 2127 return 0; 2128 2129 spin_lock_irq(&tty->ctrl_lock); 2130 if (!tty->pgrp) 2131 printk(KERN_ERR "n_tty_read: no tty->pgrp!\n"); 2132 else if (task_pgrp(current) != tty->pgrp) { 2133 spin_unlock_irq(&tty->ctrl_lock); 2134 if (is_ignored(SIGTTIN) || is_current_pgrp_orphaned()) 2135 return -EIO; 2136 kill_pgrp(task_pgrp(current), SIGTTIN, 1); 2137 set_thread_flag(TIF_SIGPENDING); 2138 return -ERESTARTSYS; 2139 } 2140 spin_unlock_irq(&tty->ctrl_lock); 2141 return 0; 2142 } 2143 2144 2145 /** 2146 * n_tty_read - read function for tty 2147 * @tty: tty device 2148 * @file: file object 2149 * @buf: userspace buffer pointer 2150 * @nr: size of I/O 2151 * 2152 * Perform reads for the line discipline. We are guaranteed that the 2153 * line discipline will not be closed under us but we may get multiple 2154 * parallel readers and must handle this ourselves. We may also get 2155 * a hangup. Always called in user context, may sleep. 2156 * 2157 * This code must be sure never to sleep through a hangup. 2158 * 2159 * n_tty_read()/consumer path: 2160 * claims non-exclusive termios_rwsem 2161 * publishes read_tail 2162 */ 2163 2164 static ssize_t n_tty_read(struct tty_struct *tty, struct file *file, 2165 unsigned char __user *buf, size_t nr) 2166 { 2167 struct n_tty_data *ldata = tty->disc_data; 2168 unsigned char __user *b = buf; 2169 DEFINE_WAIT_FUNC(wait, woken_wake_function); 2170 int c; 2171 int minimum, time; 2172 ssize_t retval = 0; 2173 long timeout; 2174 int packet; 2175 size_t tail; 2176 2177 c = job_control(tty, file); 2178 if (c < 0) 2179 return c; 2180 2181 /* 2182 * Internal serialization of reads. 2183 */ 2184 if (file->f_flags & O_NONBLOCK) { 2185 if (!mutex_trylock(&ldata->atomic_read_lock)) 2186 return -EAGAIN; 2187 } else { 2188 if (mutex_lock_interruptible(&ldata->atomic_read_lock)) 2189 return -ERESTARTSYS; 2190 } 2191 2192 down_read(&tty->termios_rwsem); 2193 2194 minimum = time = 0; 2195 timeout = MAX_SCHEDULE_TIMEOUT; 2196 if (!ldata->icanon) { 2197 minimum = MIN_CHAR(tty); 2198 if (minimum) { 2199 time = (HZ / 10) * TIME_CHAR(tty); 2200 if (time) 2201 ldata->minimum_to_wake = 1; 2202 else if (!waitqueue_active(&tty->read_wait) || 2203 (ldata->minimum_to_wake > minimum)) 2204 ldata->minimum_to_wake = minimum; 2205 } else { 2206 timeout = (HZ / 10) * TIME_CHAR(tty); 2207 ldata->minimum_to_wake = minimum = 1; 2208 } 2209 } 2210 2211 packet = tty->packet; 2212 tail = ldata->read_tail; 2213 2214 add_wait_queue(&tty->read_wait, &wait); 2215 while (nr) { 2216 /* First test for status change. */ 2217 if (packet && tty->link->ctrl_status) { 2218 unsigned char cs; 2219 if (b != buf) 2220 break; 2221 spin_lock_irq(&tty->link->ctrl_lock); 2222 cs = tty->link->ctrl_status; 2223 tty->link->ctrl_status = 0; 2224 spin_unlock_irq(&tty->link->ctrl_lock); 2225 if (tty_put_user(tty, cs, b++)) { 2226 retval = -EFAULT; 2227 b--; 2228 break; 2229 } 2230 nr--; 2231 break; 2232 } 2233 2234 if (((minimum - (b - buf)) < ldata->minimum_to_wake) && 2235 ((minimum - (b - buf)) >= 1)) 2236 ldata->minimum_to_wake = (minimum - (b - buf)); 2237 2238 if (!input_available_p(tty, 0)) { 2239 if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) { 2240 retval = -EIO; 2241 break; 2242 } 2243 if (tty_hung_up_p(file)) 2244 break; 2245 if (!timeout) 2246 break; 2247 if (file->f_flags & O_NONBLOCK) { 2248 retval = -EAGAIN; 2249 break; 2250 } 2251 if (signal_pending(current)) { 2252 retval = -ERESTARTSYS; 2253 break; 2254 } 2255 up_read(&tty->termios_rwsem); 2256 2257 timeout = wait_woken(&wait, TASK_INTERRUPTIBLE, 2258 timeout); 2259 2260 down_read(&tty->termios_rwsem); 2261 continue; 2262 } 2263 2264 if (ldata->icanon && !L_EXTPROC(tty)) { 2265 retval = canon_copy_from_read_buf(tty, &b, &nr); 2266 if (retval == -EAGAIN) { 2267 retval = 0; 2268 continue; 2269 } else if (retval) 2270 break; 2271 } else { 2272 int uncopied; 2273 2274 /* Deal with packet mode. */ 2275 if (packet && b == buf) { 2276 if (tty_put_user(tty, TIOCPKT_DATA, b++)) { 2277 retval = -EFAULT; 2278 b--; 2279 break; 2280 } 2281 nr--; 2282 } 2283 2284 uncopied = copy_from_read_buf(tty, &b, &nr); 2285 uncopied += copy_from_read_buf(tty, &b, &nr); 2286 if (uncopied) { 2287 retval = -EFAULT; 2288 break; 2289 } 2290 } 2291 2292 n_tty_check_unthrottle(tty); 2293 2294 if (b - buf >= minimum) 2295 break; 2296 if (time) 2297 timeout = time; 2298 } 2299 if (tail != ldata->read_tail) 2300 n_tty_kick_worker(tty); 2301 up_read(&tty->termios_rwsem); 2302 2303 remove_wait_queue(&tty->read_wait, &wait); 2304 if (!waitqueue_active(&tty->read_wait)) 2305 ldata->minimum_to_wake = minimum; 2306 2307 mutex_unlock(&ldata->atomic_read_lock); 2308 2309 if (b - buf) 2310 retval = b - buf; 2311 2312 return retval; 2313 } 2314 2315 /** 2316 * n_tty_write - write function for tty 2317 * @tty: tty device 2318 * @file: file object 2319 * @buf: userspace buffer pointer 2320 * @nr: size of I/O 2321 * 2322 * Write function of the terminal device. This is serialized with 2323 * respect to other write callers but not to termios changes, reads 2324 * and other such events. Since the receive code will echo characters, 2325 * thus calling driver write methods, the output_lock is used in 2326 * the output processing functions called here as well as in the 2327 * echo processing function to protect the column state and space 2328 * left in the buffer. 2329 * 2330 * This code must be sure never to sleep through a hangup. 2331 * 2332 * Locking: output_lock to protect column state and space left 2333 * (note that the process_output*() functions take this 2334 * lock themselves) 2335 */ 2336 2337 static ssize_t n_tty_write(struct tty_struct *tty, struct file *file, 2338 const unsigned char *buf, size_t nr) 2339 { 2340 const unsigned char *b = buf; 2341 DEFINE_WAIT_FUNC(wait, woken_wake_function); 2342 int c; 2343 ssize_t retval = 0; 2344 2345 /* Job control check -- must be done at start (POSIX.1 7.1.1.4). */ 2346 if (L_TOSTOP(tty) && file->f_op->write != redirected_tty_write) { 2347 retval = tty_check_change(tty); 2348 if (retval) 2349 return retval; 2350 } 2351 2352 down_read(&tty->termios_rwsem); 2353 2354 /* Write out any echoed characters that are still pending */ 2355 process_echoes(tty); 2356 2357 add_wait_queue(&tty->write_wait, &wait); 2358 while (1) { 2359 if (signal_pending(current)) { 2360 retval = -ERESTARTSYS; 2361 break; 2362 } 2363 if (tty_hung_up_p(file) || (tty->link && !tty->link->count)) { 2364 retval = -EIO; 2365 break; 2366 } 2367 if (O_OPOST(tty)) { 2368 while (nr > 0) { 2369 ssize_t num = process_output_block(tty, b, nr); 2370 if (num < 0) { 2371 if (num == -EAGAIN) 2372 break; 2373 retval = num; 2374 goto break_out; 2375 } 2376 b += num; 2377 nr -= num; 2378 if (nr == 0) 2379 break; 2380 c = *b; 2381 if (process_output(c, tty) < 0) 2382 break; 2383 b++; nr--; 2384 } 2385 if (tty->ops->flush_chars) 2386 tty->ops->flush_chars(tty); 2387 } else { 2388 struct n_tty_data *ldata = tty->disc_data; 2389 2390 while (nr > 0) { 2391 mutex_lock(&ldata->output_lock); 2392 c = tty->ops->write(tty, b, nr); 2393 mutex_unlock(&ldata->output_lock); 2394 if (c < 0) { 2395 retval = c; 2396 goto break_out; 2397 } 2398 if (!c) 2399 break; 2400 b += c; 2401 nr -= c; 2402 } 2403 } 2404 if (!nr) 2405 break; 2406 if (file->f_flags & O_NONBLOCK) { 2407 retval = -EAGAIN; 2408 break; 2409 } 2410 up_read(&tty->termios_rwsem); 2411 2412 wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT); 2413 2414 down_read(&tty->termios_rwsem); 2415 } 2416 break_out: 2417 remove_wait_queue(&tty->write_wait, &wait); 2418 if (b - buf != nr && tty->fasync) 2419 set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags); 2420 up_read(&tty->termios_rwsem); 2421 return (b - buf) ? b - buf : retval; 2422 } 2423 2424 /** 2425 * n_tty_poll - poll method for N_TTY 2426 * @tty: terminal device 2427 * @file: file accessing it 2428 * @wait: poll table 2429 * 2430 * Called when the line discipline is asked to poll() for data or 2431 * for special events. This code is not serialized with respect to 2432 * other events save open/close. 2433 * 2434 * This code must be sure never to sleep through a hangup. 2435 * Called without the kernel lock held - fine 2436 */ 2437 2438 static unsigned int n_tty_poll(struct tty_struct *tty, struct file *file, 2439 poll_table *wait) 2440 { 2441 struct n_tty_data *ldata = tty->disc_data; 2442 unsigned int mask = 0; 2443 2444 poll_wait(file, &tty->read_wait, wait); 2445 poll_wait(file, &tty->write_wait, wait); 2446 if (input_available_p(tty, 1)) 2447 mask |= POLLIN | POLLRDNORM; 2448 if (tty->packet && tty->link->ctrl_status) 2449 mask |= POLLPRI | POLLIN | POLLRDNORM; 2450 if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) 2451 mask |= POLLHUP; 2452 if (tty_hung_up_p(file)) 2453 mask |= POLLHUP; 2454 if (!(mask & (POLLHUP | POLLIN | POLLRDNORM))) { 2455 if (MIN_CHAR(tty) && !TIME_CHAR(tty)) 2456 ldata->minimum_to_wake = MIN_CHAR(tty); 2457 else 2458 ldata->minimum_to_wake = 1; 2459 } 2460 if (tty->ops->write && !tty_is_writelocked(tty) && 2461 tty_chars_in_buffer(tty) < WAKEUP_CHARS && 2462 tty_write_room(tty) > 0) 2463 mask |= POLLOUT | POLLWRNORM; 2464 return mask; 2465 } 2466 2467 static unsigned long inq_canon(struct n_tty_data *ldata) 2468 { 2469 size_t nr, head, tail; 2470 2471 if (ldata->canon_head == ldata->read_tail) 2472 return 0; 2473 head = ldata->canon_head; 2474 tail = ldata->read_tail; 2475 nr = head - tail; 2476 /* Skip EOF-chars.. */ 2477 while (head != tail) { 2478 if (test_bit(tail & (N_TTY_BUF_SIZE - 1), ldata->read_flags) && 2479 read_buf(ldata, tail) == __DISABLED_CHAR) 2480 nr--; 2481 tail++; 2482 } 2483 return nr; 2484 } 2485 2486 static int n_tty_ioctl(struct tty_struct *tty, struct file *file, 2487 unsigned int cmd, unsigned long arg) 2488 { 2489 struct n_tty_data *ldata = tty->disc_data; 2490 int retval; 2491 2492 switch (cmd) { 2493 case TIOCOUTQ: 2494 return put_user(tty_chars_in_buffer(tty), (int __user *) arg); 2495 case TIOCINQ: 2496 down_write(&tty->termios_rwsem); 2497 if (L_ICANON(tty)) 2498 retval = inq_canon(ldata); 2499 else 2500 retval = read_cnt(ldata); 2501 up_write(&tty->termios_rwsem); 2502 return put_user(retval, (unsigned int __user *) arg); 2503 default: 2504 return n_tty_ioctl_helper(tty, file, cmd, arg); 2505 } 2506 } 2507 2508 static void n_tty_fasync(struct tty_struct *tty, int on) 2509 { 2510 struct n_tty_data *ldata = tty->disc_data; 2511 2512 if (!waitqueue_active(&tty->read_wait)) { 2513 if (on) 2514 ldata->minimum_to_wake = 1; 2515 else if (!tty->fasync) 2516 ldata->minimum_to_wake = N_TTY_BUF_SIZE; 2517 } 2518 } 2519 2520 struct tty_ldisc_ops tty_ldisc_N_TTY = { 2521 .magic = TTY_LDISC_MAGIC, 2522 .name = "n_tty", 2523 .open = n_tty_open, 2524 .close = n_tty_close, 2525 .flush_buffer = n_tty_flush_buffer, 2526 .chars_in_buffer = n_tty_chars_in_buffer, 2527 .read = n_tty_read, 2528 .write = n_tty_write, 2529 .ioctl = n_tty_ioctl, 2530 .set_termios = n_tty_set_termios, 2531 .poll = n_tty_poll, 2532 .receive_buf = n_tty_receive_buf, 2533 .write_wakeup = n_tty_write_wakeup, 2534 .fasync = n_tty_fasync, 2535 .receive_buf2 = n_tty_receive_buf2, 2536 }; 2537 2538 /** 2539 * n_tty_inherit_ops - inherit N_TTY methods 2540 * @ops: struct tty_ldisc_ops where to save N_TTY methods 2541 * 2542 * Enables a 'subclass' line discipline to 'inherit' N_TTY 2543 * methods. 2544 */ 2545 2546 void n_tty_inherit_ops(struct tty_ldisc_ops *ops) 2547 { 2548 *ops = tty_ldisc_N_TTY; 2549 ops->owner = NULL; 2550 ops->refcount = ops->flags = 0; 2551 } 2552 EXPORT_SYMBOL_GPL(n_tty_inherit_ops); 2553