• Jeff Layton's avatar
    nfsd: always hold the fi_lock when bumping fi_access refcounts · 7214e860
    Jeff Layton authored
    Once we remove the client_mutex, there's an unlikely but possible race
    that could occur. It will be possible for nfs4_file_put_access to race
    with nfs4_file_get_access. The refcount will go to zero (briefly) and
    then bumped back to one. If that happens we set ourselves up for a
    use-after-free and the potential for a lock to race onto the i_flock
    list as a filp is being torn down.
    
    Ensure that we can safely bump the refcount on the file by holding the
    fi_lock whenever that's done. The only place it currently isn't is in
    get_lock_access.
    
    In order to ensure atomicity with finding the file, use the
    find_*_file_locked variants and then call get_lock_access to get new
    access references on the nfs4_file under the same lock.
    Signed-off-by: default avatarJeff Layton <jlayton@primarydata.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
    7214e860
nfs4state.c 144 KB