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>
This commit is contained in:
parent
afbda402a0
commit
63bab0651b
1 changed files with 0 additions and 5 deletions
|
@ -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)) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue