• Neil Brown's avatar
    nfsd: fix spurious EACCESS in reconnect_path() · 496d6c32
    Neil Brown authored
    Thanks to Frank Van Maarseveen for the original problem report: "A
    privileged process on an NFS client which drops privileges after using
    them to change the current working directory, will experience incorrect
    EACCES after an NFS server reboot. This problem can also occur after
    memory pressure on the server, particularly when the client side is
    quiet for some time."
    
    This occurs because the filehandle points to a directory whose parents
    are no longer in the dentry cache, and we're attempting to reconnect the
    directory to its parents without adequate permissions to perform lookups
    in the parent directories.
    
    We can therefore fix the problem by acquiring the necessary capabilities
    before attempting the reconnection.  We do this only in the
    no_subtree_check case, since the documented behavior of the
    subtree_check export option requires the server to check that the user
    has lookup permissions on all parents.
    
    The subtree_check case still has a problem, since reconnect_path()
    unnecessarily requires both read and lookup permissions on all parent
    directories.  However, a fix in that case would be more delicate, and
    use of subtree_check is already discouraged for other reasons.
    Signed-off-by: default avatarNeil Brown <neilb@suse.de>
    Cc: Frank van Maarseveen <frankvm@frankvm.com>
    Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
    496d6c32
nfsfh.c 15.9 KB