Linux Serial subsystem development
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Hungyu Lin" <dennylin0707@gmail.com>
Cc: linux-serial@vger.kernel.org
Subject: Re: [PATCH] tty: discard flip-buffer input for TCSAFLUSH
Date: Tue, 27 Oct 2026 05:56:52 +0000	[thread overview]
Message-ID: <sashiko-outbox-186146@kernel.org> (raw)
In-Reply-To: <20261027054304.35543-1-dennylin0707@gmail.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] tty: missing tty_unthrottle() in set_termios() on TERMIOS_FLUSH
--

commit 757d2dda2b0d44401d4d977f6413afe8f7669c45
Author: Hungyu Lin <dennylin0707@gmail.com>

tty: discard flip-buffer input for TCSAFLUSH

This commit updates set_termios() to call tty_buffer_flush() instead of only
invoking the line discipline flush_buffer callback when TERMIOS_FLUSH is set,
so pending input in the tty flip buffers is also discarded on TCSAFLUSH.

> diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c
> index 90c70d8d14e3a..45cb77185dbb2 100644
> --- a/drivers/tty/tty_ioctl.c
> +++ b/drivers/tty/tty_ioctl.c
> @@ -496,8 +496,8 @@ static int set_termios(struct tty_struct *tty, void __user *arg, int opt)
>  
>  		ld = tty_ldisc_ref(tty);
>  		if (ld != NULL) {
> -			if ((opt & TERMIOS_FLUSH) && ld->ops->flush_buffer)
> -				ld->ops->flush_buffer(tty);
> +			if (opt & TERMIOS_FLUSH)
> +				tty_buffer_flush(tty, ld);

[Severity: High]
Should this path also call tty_unthrottle(tty) after flushing the buffers,
similar to how __tty_perform_flush() handles TCIFLUSH and TCIOFLUSH?

drivers/tty/tty_ioctl.c:__tty_perform_flush() {
	switch (arg) {
	case TCIFLUSH:
		if (ld && ld->ops->flush_buffer) {
			ld->ops->flush_buffer(tty);
			tty_unthrottle(tty);
		}
		break;
}

When a terminal using N_TTY fills ldata->read_buf and queues additional bytes
in the flip buffers, n_tty_receive_buf_common() sets ldata->no_room and calls
n_tty_check_throttle() -> tty_throttle_safe(), which sets TTY_THROTTLED and
throttles the underlying driver (or on a PTY pair, fills port->buf up to
mem_limit so the master blocks on write_wait).

Previously, set_termios() only called ld->ops->flush_buffer(tty), leaving the
flip buffer data intact to refill ldata->read_buf via flush_to_ldisc(), so a
subsequent n_tty_read() would still see input_available_p(tty, 0) and reach
n_tty_check_unthrottle(tty).

With tty_buffer_flush(tty, ld) now emptying both the flip buffers and
ldata->read_buf without calling tty_unthrottle(tty), a subsequent n_tty_read()
sees no available input and blocks in n_tty_wait_for_input() before reaching
n_tty_check_unthrottle(tty):

drivers/tty/n_tty.c:n_tty_read() {
		if (!input_available_p(tty, 0)) {
			up_read(&tty->termios_rwsem);
			tty_buffer_flush_work(tty->port);
			down_read(&tty->termios_rwsem);
			if (!input_available_p(tty, 0)) {
				int ret = n_tty_wait_for_input(tty, file, &wait,
							       &timeout);
				if (ret <= 0) {
					retval = ret;
					break;
				}
				continue;
			}
		}
}

Can this leave a throttled serial/USB-serial device unable to receive new
input to wake the reader, or leave a PTY master permanently blocked on
write_wait after tcsetattr() with TCSAFLUSH?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261027054304.35543-1-dennylin0707@gmail.com?part=1

  reply	other threads:[~2026-10-27  5:56 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-27  5:43 [PATCH] tty: discard flip-buffer input for TCSAFLUSH Hungyu Lin
2026-10-27  5:56 ` sashiko-bot [this message]
2026-10-27  6:00 ` Greg KH
2026-10-27  8:21   ` Hungyu Lin
2026-10-27  9:25     ` Greg KH
2026-10-27 16:36       ` Hungyu Lin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=sashiko-outbox-186146@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=dennylin0707@gmail.com \
    --cc=linux-serial@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox