summaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs3proc.c
diff options
context:
space:
mode:
authorRoss Lagerwall2014-08-09 15:44:00 +0200
committerJ. Bruce Fields2014-08-17 18:00:14 +0200
commit63bab0651be0ba857200219a08644e6a99f448b6 (patch)
tree17fd443e8c826a601742d107e81d90e5b1be5940 /fs/nfsd/nfs3proc.c
parentnfsd: call nfs4_put_deleg_lease outside of state_lock (diff)
downloadkernel-qcow2-linux-63bab0651be0ba857200219a08644e6a99f448b6.tar.gz
kernel-qcow2-linux-63bab0651be0ba857200219a08644e6a99f448b6.tar.xz
kernel-qcow2-linux-63bab0651be0ba857200219a08644e6a99f448b6.zip
nfsd3: Check write permission after checking existence
When creating a file that already exists in a read-only directory with O_EXCL, the NFSv3 server returns EACCES rather than EEXIST (which local files and the NFSv4 server return). Fix this by checking the MAY_CREATE permission only if the file does not exist. Since this already happens in do_nfsd_create, the check in nfsd3_proc_create can simply be removed. Signed-off-by: Ross Lagerwall <rosslagerwall@gmail.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfs3proc.c')
-rw-r--r--fs/nfsd/nfs3proc.c5
1 files changed, 0 insertions, 5 deletions
diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c
index fa2525b2e9d7..fc51f7f6b36d 100644
--- a/fs/nfsd/nfs3proc.c
+++ b/fs/nfsd/nfs3proc.c
@@ -223,11 +223,6 @@ nfsd3_proc_create(struct svc_rqst *rqstp, struct nfsd3_createargs *argp,
newfhp = fh_init(&resp->fh, NFS3_FHSIZE);
attr = &argp->attrs;
- /* Get the directory inode */
- nfserr = fh_verify(rqstp, dirfhp, S_IFDIR, NFSD_MAY_CREATE);
- if (nfserr)
- RETURN_STATUS(nfserr);
-
/* Unfudge the mode bits */
attr->ia_mode &= ~S_IFMT;
if (!(attr->ia_valid & ATTR_MODE)) {