Re: Bug in tty cooked mode kernel 3.12.3

From: Peter Hurley
Date: Tue Dec 17 2013 - 12:46:32 EST


On 12/17/2013 12:30 PM, Greg Kroah-Hartman wrote:
On Mon, Dec 09, 2013 at 06:06:07PM -0500, Peter Hurley wrote:
On 12/07/2013 06:46 PM, Karl Dahlke wrote:
This may have appeared in 3.9.11 with the changes to tty.
Don't know; I just started running 3.12 from kernel.org.
Perhaps nobody saw it before because nobody runs command line programs,
we're all on desktops or x or whatever,
and even those in the command line are still raw.
bash is raw by default, but I run it cooked.
You can supress its readline functions like this.

set +o emacs
set +o vi
set +o histexpand
set +o history

That puts its tty back into cooked mode.

Come up in run level 3, command line mode,
and bring up two consoles with bash in cooked mode as above.
Set a simple prompt like this.

PS1='$ '

Switch to console 2 via alt-f2.
Hit return.
The cursor should drop to a new line then give you the $ prompt.
But it puts the $ prompt next too the old one, then drops down
to a blank line.
The $ prompt and the crlf are out of sequence.
Hit return a few more times and it will straighten itself out.
Then switch back to console 1 alt-f1
Hit return and the same bug,
$ $

hit return a few more times to straighten it out.
Switch back to console 2 and the same problem.
For me it's repeatable.

It's also very confusing when I'm running other command line programs with cooked tty.
For unknown reasons the crlf can come out at the wrong time,
breaking lines or leaving lines together.
My editor can run either way, so I've switched it over to readline mode
and I haven't noticed any problems this way, yet.
But I would prefer the cooked mode.

I looked through MAINTAINERS but couldn't find
a clear maintainer for drivers/tty/tty*.c
Please forward this to the appropriate people.

Thanks for the report, Karl.

Please test the patch below (requires
commit 39434abd942c8e4b9c14c06a03b3245beaf8467f,
'n_tty: Fix missing newline echo').
This should fix the 'newline output after the new prompt' problem.

Note however that the other output order you observe is correct:
you press enter, a newline is echoed to terminal which mixes
with program output, the program ends, and the cooked mode
shell outputs an extra prompt because it reads a newline (which
the program did not read).

Regards,
Peter Hurley

--- >% ---
From: Peter Hurley <peter@xxxxxxxxxxxxxxxxxx>
Subject: [PATCH] n_tty: Fix apparent order of echoed output

With block processing of echoed output, observed output order is still
required. Push completed echoes and echo commands prior to output.

Introduce echo_mark echo buffer index, which tracks completed echo
commands; ie., those submitted via commit_echoes but which may not
have been committed. Ensure that completed echoes are output prior
to subsequent terminal writes in process_echoes().

Fixes newline/prompt output order in cooked mode shell.

Cc: <stable@xxxxxxxxxxxxxxx> # 3.12.x : 39434ab n_tty: Fix missing newline echo
Reported-by: Karl Dahlke <eklhad@xxxxxxxxxxx>
Reported-by: Mikulas Patocka <mpatocka@xxxxxxxxxx>
Signed-off-by: Peter Hurley <peter@xxxxxxxxxxxxxxxxxx>
---
drivers/tty/n_tty.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

Do you want me to queue this up for 3.13-final, or have I already?

Yes, please queue this for 3.13.

Regards,
Peter Hurley

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/