Commit 63bab0651be0ba857200219a08644e6a99f448b6

Authored by Ross Lagerwall
Committed by J. Bruce Fields
1 parent afbda402a0

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>

Showing 1 changed file with 0 additions and 5 deletions Side-by-side Diff

... ... @@ -223,11 +223,6 @@
223 223 newfhp = fh_init(&resp->fh, NFS3_FHSIZE);
224 224 attr = &argp->attrs;
225 225  
226   - /* Get the directory inode */
227   - nfserr = fh_verify(rqstp, dirfhp, S_IFDIR, NFSD_MAY_CREATE);
228   - if (nfserr)
229   - RETURN_STATUS(nfserr);
230   -
231 226 /* Unfudge the mode bits */
232 227 attr->ia_mode &= ~S_IFMT;
233 228 if (!(attr->ia_valid & ATTR_MODE)) {