Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -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)) {