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