• Paulo Alcantara's avatar
    smb: client: fix potential deadlock when releasing mids · e6322fd1
    Paulo Alcantara authored
    All release_mid() callers seem to hold a reference of @mid so there is
    no need to call kref_put(&mid->refcount, __release_mid) under
    @server->mid_lock spinlock.  If they don't, then an use-after-free bug
    would have occurred anyways.
    
    By getting rid of such spinlock also fixes a potential deadlock as
    shown below
    
    CPU 0                                CPU 1
    ------------------------------------------------------------------
    cifs_demultiplex_thread()            cifs_debug_data_proc_show()
     release_mid()
      spin_lock(&server->mid_lock);
                                         spin_lock(&cifs_tcp_ses_lock)
    				      spin_lock(&server->mid_lock)
      __release_mid()
       smb2_find_smb_tcon()
        spin_lock(&cifs_tcp_ses_lock) *deadlock*
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarPaulo Alcantara (SUSE) <pc@manguebit.com>
    Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
    e6322fd1
transport.c 47.9 KB