nfsd: avoid permission checks on EXCLUSIVE_CREATE replay
[pandora-kernel.git] / fs / nfsd / nfs4proc.c
index b8c5538..fe5c5fb 100644 (file)
@@ -193,6 +193,7 @@ static __be32
 do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open)
 {
        struct svc_fh resfh;
+       int accmode;
        __be32 status;
 
        fh_init(&resfh, NFS4_FHSIZE);
@@ -252,9 +253,10 @@ do_open_lookup(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_o
        /* set reply cache */
        fh_copy_shallow(&open->op_openowner->oo_owner.so_replay.rp_openfh,
                        &resfh.fh_handle);
-       if (!open->op_created)
-               status = do_open_permission(rqstp, current_fh, open,
-                                           NFSD_MAY_NOP);
+       accmode = NFSD_MAY_NOP;
+       if (open->op_created)
+               accmode |= NFSD_MAY_OWNER_OVERRIDE;
+       status = do_open_permission(rqstp, current_fh, open, accmode);
 
 out:
        fh_put(&resfh);