• Enzo Matsumiya's avatar
    cifs: properly invalidate cached root handle when closing it · 9351590f
    Enzo Matsumiya authored
    Cached root file was not being completely invalidated sometimes.
    
    Reproducing:
    - With a DFS share with 2 targets, one disabled and one enabled
    - start some I/O on the mount
      # while true; do ls /mnt/dfs; done
    - at the same time, disable the enabled target and enable the disabled
      one
    - wait for DFS cache to expire
    - on reconnect, the previous cached root handle should be invalid, but
      open_cached_dir_by_dentry() will still try to use it, but throws a
      use-after-free warning (kref_get())
    
    Make smb2_close_cached_fid() invalidate all fields every time, but only
    send an SMB2_close() when the entry is still valid.
    Signed-off-by: default avatarEnzo Matsumiya <ematsumiya@suse.de>
    Reviewed-by: default avatarPaulo Alcantara (SUSE) <pc@cjr.nz>
    Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
    9351590f
smb2ops.c 164 KB