Skip to content

Commit e4c3cc6

Browse files
cometzerogregkh
authored andcommitted
tty: do not set TTY_IO_ERROR flag if console port
commit 2a48602 upstream. Since Commit 761ed4a ('tty: serial_core: convert uart_close to use tty_port_close') and Commit 4dda864 ('tty: serial_core: Fix serial console crash on port shutdown), a serial port which is used as console can be stuck when logging out if there is a remained process. After logged out, agetty will try to grab the serial port but it will be failed because the previous process did not release the port correctly. To fix this, TTY_IO_ERROR bit should not be enabled of tty_port_close if the port is console port. Reproduce step: - Run background processes from serial console $ while true; do sleep 10; done & - Log out $ logout -> Stuck - Read journal log by journalctl | tail Jan 28 16:07:01 ubuntu systemd[1]: Stopped Serial Getty on ttyAMA0. Jan 28 16:07:01 ubuntu systemd[1]: Started Serial Getty on ttyAMA0. Jan 28 16:07:02 ubuntu agetty[1643]: /dev/ttyAMA0: not a tty Fixes: 761ed4a ("tty: serial_core: convert uart_close to use tty_port_close") Cc: Geert Uytterhoeven <geert+renesas@glider.be> Cc: Rob Herring <robh@kernel.org> Cc: Jiri Slaby <jslaby@suse.com> Signed-off-by: Chanho Park <parkch98@gmail.com> Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 4f50d3a commit e4c3cc6

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

drivers/tty/tty_port.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,8 @@ void tty_port_close(struct tty_port *port, struct tty_struct *tty,
639639
if (tty_port_close_start(port, tty, filp) == 0)
640640
return;
641641
tty_port_shutdown(port, tty);
642-
set_bit(TTY_IO_ERROR, &tty->flags);
642+
if (!port->console)
643+
set_bit(TTY_IO_ERROR, &tty->flags);
643644
tty_port_close_end(port, tty);
644645
tty_port_tty_set(port, NULL);
645646
}

0 commit comments

Comments
 (0)