summaryrefslogtreecommitdiffstats
path: root/fs/nfsd/xdr4.h
diff options
context:
space:
mode:
authorJeff Layton <jlayton@kernel.org>2022-07-26 16:45:30 +1000
committerChuck Lever <chuck.lever@oracle.com>2022-07-29 20:17:00 -0400
commit876c553cb41026cb6ad3cef970a35e5f69c42a25 (patch)
treef9b8ac70320658bc03187aa1c08d117f4e2f8145 /fs/nfsd/xdr4.h
parentbbf936edd543e7220f60f9cbd6933b916550396d (diff)
downloadlinux-stable-876c553cb41026cb6ad3cef970a35e5f69c42a25.tar.gz
linux-stable-876c553cb41026cb6ad3cef970a35e5f69c42a25.tar.bz2
linux-stable-876c553cb41026cb6ad3cef970a35e5f69c42a25.zip
NFSD: verify the opened dentry after setting a delegation
Between opening a file and setting a delegation on it, someone could rename or unlink the dentry. If this happens, we do not want to grant a delegation on the open. On a CLAIM_NULL open, we're opening by filename, and we may (in the non-create case) or may not (in the create case) be holding i_rwsem when attempting to set a delegation. The latter case allows a race. After getting a lease, redo the lookup of the file being opened and validate that the resulting dentry matches the one in the open file description. To properly redo the lookup we need an rqst pointer to pass to nfsd_lookup_dentry(), so make sure that is available. Signed-off-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Diffstat (limited to 'fs/nfsd/xdr4.h')
-rw-r--r--fs/nfsd/xdr4.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h
index 8c8d7b503096..96267258e629 100644
--- a/fs/nfsd/xdr4.h
+++ b/fs/nfsd/xdr4.h
@@ -279,6 +279,7 @@ struct nfsd4_open {
struct nfs4_clnt_odstate *op_odstate; /* used during processing */
struct nfs4_acl *op_acl;
struct xdr_netobj op_label;
+ struct svc_rqst *op_rqstp;
};
struct nfsd4_open_confirm {