Patch "NFSv4: nfs4_copy_delegation_stateid() must fail if the delegation is invalid" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
NFSv4: nfs4_copy_delegation_stateid() must fail if the delegation is invalid
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
nfsv4-nfs4_copy_delegation_stateid-must-fail-if-the-delegation-is-invalid.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
aa05c87f23efe417adc7ff9b4193b7201ec0dd79Mon Sep 17 00:00:00 2001
From: Trond Myklebust <[email protected]>
Date: Thu, 22 Sep 2016 13:38:54 -0400
Subject: NFSv4: nfs4_copy_delegation_stateid() must fail if the delegation is invalid
From: Trond Myklebust <[email protected]>
commit aa05c87f23efe417adc7ff9b4193b7201ec0dd79 upstream.
We must not allow the use of delegations that have been revoked or are being returned.
--- fs/nfs/delegation.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
fs/nfs/delegation.c +13 -4
@@ -41,6 +41,17 @@ void nfs_mark_delegation_referenced(struset_bit (NFS_DELEGATION_REFERENCED , &delegation->flags); } +static bool +nfs4_is_valid_delegation (const struct nfs_delegation *delegation, +fmode_t flags) +{ +if (delegation !=NULL && (delegation->type & flags) == flags && + !test_bit (NFS_DELEGATION_REVOKED , &delegation->flags) && + !test_bit (NFS_DELEGATION_RETURNING , &delegation->flags)) +return true; +return false; +} +static int nfs4_do_check_delegation (struct inode *inode,fmode_t flags,bool mark) {
@@ -50,9 +61,7 @@ nfs4_do_check_delegation(struct inode *i flags &=FMODE_READ |FMODE_WRITE ;rcu_read_lock (); delegation =rcu_dereference (NFS_I (inode)->delegation); -if (delegation !=NULL && (delegation->type & flags) == flags && - !test_bit (NFS_DELEGATION_REVOKED , &delegation->flags) && - !test_bit (NFS_DELEGATION_RETURNING , &delegation->flags)) { +if (nfs4_is_valid_delegation (delegation, flags)) {if (mark)nfs_mark_delegation_referenced (delegation); ret =1 ;
@@ -893,7 +902,7 @@ bool nfs4_copy_delegation_stateid(nfs4_s flags &=FMODE_READ |FMODE_WRITE ;rcu_read_lock (); delegation =rcu_dereference (nfsi->delegation); - ret = (delegation !=NULL && (delegation->type & flags) == flags); + ret =nfs4_is_valid_delegation (delegation, flags);if (ret) {nfs4_stateid_copy (dst, &delegation->stateid);nfs_mark_delegation_referenced (delegation);
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/nfsv4-don-t-report-revoked-delegations-as-valid-in-nfs_have_delegation.patch queue-4.4/nfsv4.2-fix-a-reference-leak-in-nfs42_proc_layoutstats_generic.patch queue-4.4/nfsv4-open-state-recovery-must-account-for-file-permission-changes.patch queue-4.4/nfsv4-nfs4_copy_delegation_stateid-must-fail-if-the-delegation-is-invalid.patch