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