Commit 63bab065 authored by Ross Lagerwall's avatar Ross Lagerwall Committed by J. Bruce Fields

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: default avatarRoss Lagerwall <rosslagerwall@gmail.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent afbda402
...@@ -223,11 +223,6 @@ nfsd3_proc_create(struct svc_rqst *rqstp, struct nfsd3_createargs *argp, ...@@ -223,11 +223,6 @@ nfsd3_proc_create(struct svc_rqst *rqstp, struct nfsd3_createargs *argp,
newfhp = fh_init(&resp->fh, NFS3_FHSIZE); newfhp = fh_init(&resp->fh, NFS3_FHSIZE);
attr = &argp->attrs; 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 */ /* Unfudge the mode bits */
attr->ia_mode &= ~S_IFMT; attr->ia_mode &= ~S_IFMT;
if (!(attr->ia_valid & ATTR_MODE)) { if (!(attr->ia_valid & ATTR_MODE)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment