linux/drivers/tty
Jiri Slaby ecaaa92488 TTY: ldisc, wait for ldisc infinitely in hangup
commit 0c73c08ec7 upstream.

For /dev/console case, we do not kill all ldisc users. It's due to
redirected_tty_write test in __tty_hangup. In that case there still
might be a process waiting e.g. in n_tty_read for input.

We wait for such processes to disappear. The problem is that we use a
timeout. After this timeout, we continue closing the ldisc and start
freeing tty resources. It obviously leads to crashes when the other
process is woken.

So to fix this, we wait infinitely before reiniting the ldisc. (The
tiocsetd remains untouched -- times out after 5s.)

This is nicely reproducible with this run from shell:
  exec 0<>/dev/console 1<>/dev/console 2<>/dev/console
and stopping a getty like:
  systemctl stop serial-getty@ttyS0.service

The crash proper may be produced only under load or with constified
timing the same as for 92f6fa09b.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Dave Young <hidave.darkstar@gmail.com>
Cc: Dave Jones <davej@redhat.com>
Cc: Ben Hutchings <ben@decadent.org.uk>
Cc: Dmitriy Matrosov <sgf.dma@gmail.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-11-26 09:09:58 -08:00
..
hvc tty: hvc_dcc: Fix duplicate character inputs 2011-11-26 09:09:57 -08:00
ipwireless Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6 2011-05-24 13:28:35 -07:00
serial pch_uart: Support new device LAPIS Semiconductor ML7831 IOH 2011-11-26 09:09:57 -08:00
vt Revert "tty: make receive_buf() return the amout of bytes received" 2011-06-04 06:33:24 +09:00
amiserial.c tty: remove invalid location line in file header 2011-04-19 16:33:36 -07:00
bfin_jtag_comm.c drivers/tty/bfin_jtag_comm.c: avoid calling put_tty_driver on NULL 2011-03-23 19:46:39 -07:00
cyclades.c Merge branch 'trivial' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6 2011-05-26 13:19:00 -07:00
isicom.c tty: move a number of tty drivers from drivers/char/ to drivers/tty/ 2011-02-22 16:14:56 -08:00
Kconfig n_tracerouter and n_tracesink ldisc additions. 2011-05-13 16:31:00 -07:00
Makefile n_tracerouter and n_tracesink ldisc additions. 2011-05-13 16:31:00 -07:00
moxa.c drivers/tty/moxa.c: Put correct tty value 2011-04-29 14:17:45 -07:00
moxa.h tty: move a number of tty drivers from drivers/char/ to drivers/tty/ 2011-02-22 16:14:56 -08:00
mxser.c tty: move a number of tty drivers from drivers/char/ to drivers/tty/ 2011-02-22 16:14:56 -08:00
mxser.h Fix common misspellings 2011-03-31 11:26:23 -03:00
n_gsm.c n_gsm: fix the wrong FCS handling 2011-08-04 21:58:40 -07:00
n_hdlc.c Revert "tty: make receive_buf() return the amout of bytes received" 2011-06-04 06:33:24 +09:00
n_r3964.c Revert "tty: make receive_buf() return the amout of bytes received" 2011-06-04 06:33:24 +09:00
n_tracerouter.c n_tracerouter and n_tracesink ldisc additions. 2011-05-13 16:31:00 -07:00
n_tracesink.c n_tracerouter and n_tracesink ldisc additions. 2011-05-13 16:31:00 -07:00
n_tracesink.h n_tracerouter and n_tracesink ldisc additions. 2011-05-13 16:31:00 -07:00
n_tty.c TTY: ntty, add one more sanity check 2011-06-07 10:36:47 -07:00
nozomi.c Merge branch 'trivial' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6 2011-05-26 13:19:00 -07:00
pty.c TTY: pty, release tty in all ptmx_open fail paths 2011-11-11 09:35:13 -08:00
rocket_int.h tty: move a number of tty drivers from drivers/char/ to drivers/tty/ 2011-02-22 16:14:56 -08:00
rocket.c TTY: rocket, remove unused variables 2011-04-19 14:41:48 -07:00
rocket.h tty: move a number of tty drivers from drivers/char/ to drivers/tty/ 2011-02-22 16:14:56 -08:00
synclink_gt.c Fix common misspellings 2011-03-31 11:26:23 -03:00
synclink.c tty: remove invalid location line in file header 2011-04-19 16:33:36 -07:00
synclinkmp.c Fix common misspellings 2011-03-31 11:26:23 -03:00
sysrq.c lib, arch: add filter argument to show_mem and fix private implementations 2011-03-24 17:49:37 -07:00
tty_audit.c tty_audit: fix tty_audit_add_data live lock on audit disabled 2011-03-07 12:04:50 -08:00
tty_buffer.c tty_buffer: get rid of 'seen_tail' logic in flush_to_ldisc 2011-06-08 07:46:30 -07:00
tty_io.c TTY: make tty_add_file non-failing 2011-11-11 09:35:12 -08:00
tty_ioctl.c Merge branch 'tty-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6 2011-05-23 12:23:20 -07:00
tty_ldisc.c TTY: ldisc, wait for ldisc infinitely in hangup 2011-11-26 09:09:58 -08:00
tty_mutex.c tty: remove invalid location line in file header 2011-04-19 16:33:36 -07:00
tty_port.c