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