• Parthasarathy Bhuvaragan's avatar
    tipc: fix nametbl_lock soft lockup at module exit · 9dc3abdd
    Parthasarathy Bhuvaragan authored
    Commit 333f7962 ("tipc: fix a race condition leading to
    subscriber refcnt bug") reveals a soft lockup while acquiring
    nametbl_lock.
    
    Before commit 333f7962, we call tipc_conn_shutdown() from
    tipc_close_conn() in the context of tipc_topsrv_stop(). In that
    context, we are allowed to grab the nametbl_lock.
    
    Commit 333f7962, moved tipc_conn_release (renamed from
    tipc_conn_shutdown) to the connection refcount cleanup. This allows
    either tipc_nametbl_withdraw() or tipc_topsrv_stop() to the cleanup.
    
    Since tipc_exit_net() first calls tipc_topsrv_stop() and then
    tipc_nametble_withdraw() increases the chances for the later to
    perform the connection cleanup.
    
    The soft lockup occurs in the call chain of tipc_nametbl_withdraw(),
    when it performs the tipc_conn_kref_release() as it tries to grab
    nametbl_lock again while holding it already.
    tipc_nametbl_withdraw() grabs nametbl_lock
      tipc_nametbl_remove_publ()
        tipc_subscrp_report_overlap()
          tipc_subscrp_send_event()
            tipc_conn_sendmsg()
              << if (con->flags != CF_CONNECTED) we do conn_put(),
                 triggering the cleanup as refcount=0. >>
              tipc_conn_kref_release
                tipc_sock_release
                  tipc_conn_release
                    tipc_subscrb_delete
                      tipc_subscrp_delete
                        tipc_nametbl_unsubscribe << Soft Lockup >>
    
    The previous changes in this series fixes the race conditions fixed
    by commit 333f7962. Hence we can now revert the commit.
    
    Fixes: 333f7962 ("tipc: fix a race condition leading to subscriber refcnt bug")
    Reported-and-Tested-by: default avatarJohn Thompson <thompa.atl@gmail.com>
    Acked-by: default avatarYing Xue <ying.xue@windriver.com>
    Acked-by: default avatarJon Maloy <jon.maloy@ericsson.com>
    Signed-off-by: default avatarParthasarathy Bhuvaragan <parthasarathy.bhuvaragan@ericsson.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    9dc3abdd
server.c 15.1 KB