]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
NFSD: Replace use of NFSD_MAY_LOCK in nfsd4_lock()
authorChuck Lever <chuck.lever@oracle.com>
Sun, 13 Oct 2024 20:02:28 +0000 (16:02 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Tue, 19 Nov 2024 01:23:00 +0000 (20:23 -0500)
NFSv4 LOCK operations should not avoid the set of authorization
checks that apply to all other NFSv4 operations. Also, the
"no_auth_nlm" export option should apply only to NLM LOCK requests.
It's not necessary or sensible to apply it to NFSv4 LOCK operations.

Instead, set no permission bits when calling fh_verify(). Subsequent
stateid processing handles authorization checks.

Reported-by: NeilBrown <neilb@suse.de>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfs4state.c

index 291db55c90e4906bf5c1e0a4986520b7d8b7dcd2..2efceeea0fe3eae59ad054cda6fd6668421cd7c1 100644 (file)
@@ -7965,11 +7965,9 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
        if (check_lock_length(lock->lk_offset, lock->lk_length))
                 return nfserr_inval;
 
-       if ((status = fh_verify(rqstp, &cstate->current_fh,
-                               S_IFREG, NFSD_MAY_LOCK))) {
-               dprintk("NFSD: nfsd4_lock: permission denied!\n");
+       status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0);
+       if (status != nfs_ok)
                return status;
-       }
        sb = cstate->current_fh.fh_dentry->d_sb;
 
        if (lock->lk_is_new) {