• Alan Cox's avatar
    tty: rewrite the ldisc locking · c65c9bc3
    Alan Cox authored
    There are several pretty much unfixable races in the old ldisc code, especially
    with respect to pty behaviour and also to hangup. It's easier to rewrite the
    code than simply try and patch it up.
    
    This patch
    - splits the ldisc from the tty (so we will be able to refcount it more cleanly
      later)
    - introduces a mutex lock for ldisc changing on an active device
    - fixes the complete mess that hangup caused
    - implements hopefully correct setldisc/close/hangup locking
    
    There are still some problems around pty pairs that have always been there but
    at least it is now possible to understand the code and fix further problems.
    
    This fixes the following known bugs
    - hang up can leak ldisc references
    - hang up may not call open/close on ldisc in a matched way
    - pty/tty pairs can deadlock during an ldisc change
    - reading the ldisc proc files can cause every ldisc to be loaded
    
    and probably a few other of the mysterious ldisc race reports.
    
    I'm sure it also adds the odd new one.
    Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    c65c9bc3
n_hdlc.c 27 KB