• Russ Gorby's avatar
    tty: n_gsm: Added refcount usage to gsm_mux and gsm_dlci structs · 6ab8fba7
    Russ Gorby authored
    The gsm_mux is created/destroyed when ldisc is
    opened/closed but clients of the MUX channel devices (gsmttyN)
    may access this structure as long as the TTYs are open.
    For the open, the ldisc open is guaranteed to preceed the TTY open,
    but the close has no such guaranteed ordering. As a result,
    the gsm_mux can be freed in the ldisc close before being accessed
    by one of the TTY clients. This can happen if the ldisc is removed
    while there are open, active MUX channels.
    A similar situation exists for DLCI-0, it is basically a resource
    shared by MUX and DLCI  , and should not be freed while they can
    be accessed
    
    To avoid this, gsm_mux and dlcis now have a reference counter
    ldisc open takes a reference on the mux and all the dlcis
    gsmtty_open takes a reference on the mux, dlci0 and its specific
    dlci. Dropping the last reference initiates the actual free.
    Signed-off-by: default avatarRuss Gorby <russ.gorby@intel.com>
    Acked-by: default avatarAlan Cox <alan@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    6ab8fba7
n_gsm.c 76.2 KB