linux-kernel-test/fs/nfsd
Neil Brown 496d6c32d4 nfsd: fix spurious EACCESS in reconnect_path()
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: Neil Brown <neilb@suse.de>
Cc: Frank van Maarseveen <frankvm@frankvm.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
2008-06-30 15:24:11 -04:00
..
auth.c nfsd: fix sparse warnings 2008-04-23 16:13:39 -04:00
auth.h nfsd: minor fs/nfsd/auth.h cleanup 2008-02-01 16:42:05 -05:00
export.c IPv6 support for NFS server export caches 2008-04-23 16:13:36 -04:00
lockd.c nfsd: rename MAY_ flags 2008-06-23 13:02:50 -04:00
Makefile knfsd: trivial makefile cleanup 2007-05-09 12:30:54 -07:00
nfs2acl.c nfsd: rename MAY_ flags 2008-06-23 13:02:50 -04:00
nfs3acl.c nfsd: rename MAY_ flags 2008-06-23 13:02:50 -04:00
nfs3proc.c nfsd: rename MAY_ flags 2008-06-23 13:02:50 -04:00
nfs3xdr.c Use struct path in struct svc_export 2008-02-14 21:17:08 -08:00
nfs4acl.c knfsd: nfsd4: fix handling of acl errrors 2007-07-17 10:23:07 -07:00
nfs4callback.c fs: replace remaining __FUNCTION__ occurrences 2008-04-30 08:29:54 -07:00
nfs4idmap.c nfsd: fix sparse warnings 2008-04-23 16:13:39 -04:00
nfs4proc.c nfsd: rename MAY_ flags 2008-06-23 13:02:50 -04:00
nfs4recover.c [PATCH] r/o bind mounts: get callers of vfs_mknod/create/mkdir() 2008-04-19 00:25:34 -04:00
nfs4state.c nfsd: rename MAY_ flags 2008-06-23 13:02:50 -04:00
nfs4xdr.c nfsd: make nfs4xdr WRITEMEM safe against zero count 2008-06-23 13:02:48 -04:00
nfscache.c nfsd: fail module init on reply cache init failure 2008-02-01 16:42:04 -05:00
nfsctl.c knfsd: clean up nfsd filesystem interfaces 2008-06-23 13:02:49 -04:00
nfsfh.c nfsd: fix spurious EACCESS in reconnect_path() 2008-06-30 15:24:11 -04:00
nfsproc.c nfsd: rename MAY_ flags 2008-06-23 13:02:50 -04:00
nfssvc.c nfsd: fix race in nfsd_nrthreads() 2008-06-23 13:02:50 -04:00
nfsxdr.c Use struct path in struct svc_export 2008-02-14 21:17:08 -08:00
stats.c [PATCH] knfsd: nfsd4: add per-operation server stats 2006-07-10 13:24:27 -07:00
vfs.c nfsd: rename MAY_ flags 2008-06-23 13:02:50 -04:00