• Alan Cox's avatar
    tty: Fix the ldisc hangup race · 638b9648
    Alan Cox authored
    This was noticed by Matthias Urlichs and he proposed a fix. This patch
    does the fixing a different way to avoid introducing several new race
    conditions into the code.
    
    The problem case is TTY_DRIVER_RESET_TERMIOS = 0. In that case while we
    abort the ldisc change, the hangup processing has not cleaned up and restarted
    the ldisc either.
    
    We can't restart the ldisc stuff in the set_ldisc as we don't know what
    the hangup did and may touch stuff we shouldn't as we are no longer
    supposed to influence the tty at that point in case it has been re-opened
    before we get rescheduled.
    
    Instead do it the simple way. Always re-init the ldisc on the hangup, but
    use TTY_DRIVER_RESET_TERMIOS to indicate that we should force N_TTY.
    Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
    Cc: stable <stable@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    638b9648
tty_ldisc.c 21.6 KB