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