From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.linuxfoundation.org ([140.211.169.12]:48462 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753662AbcJZIRc (ORCPT ); Wed, 26 Oct 2016 04:17:32 -0400 Subject: Patch "NFS: Fix inode corruption in nfs_prime_dcache()" has been added to the 4.8-stable tree To: trond.myklebust@primarydata.com, Anna.Schumaker@Netapp.com, green@linuxhacker.ru, gregkh@linuxfoundation.org Cc: , From: Date: Wed, 26 Oct 2016 10:16:19 +0200 Message-ID: <147746977954248@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org List-ID: This is a note to let you know that I've just added the patch titled NFS: Fix inode corruption in nfs_prime_dcache() to the 4.8-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: nfs-fix-inode-corruption-in-nfs_prime_dcache.patch and it can be found in the queue-4.8 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let know about it. >>From 7dc72d5f7a0ec97a53e126c46e2cbd2560757955 Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Thu, 22 Sep 2016 13:38:52 -0400 Subject: NFS: Fix inode corruption in nfs_prime_dcache() From: Trond Myklebust commit 7dc72d5f7a0ec97a53e126c46e2cbd2560757955 upstream. Due to inode number reuse in filesystems, we can end up corrupting the inode on our client if we apply the file attributes without ensuring that the filehandle matches. Typical symptoms include spurious "mode changed" reports in the syslog. We still do want to ensure that we don't invalidate the dentry if the inode number matches, but we don't have a filehandle. Fixes: fa9233699cc1 ("NFS: Don't require a filehandle to refresh...") Signed-off-by: Trond Myklebust Tested-by: Oleg Drokin Signed-off-by: Anna Schumaker Signed-off-by: Greg Kroah-Hartman --- fs/nfs/dir.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -435,11 +435,11 @@ int nfs_same_file(struct dentry *dentry, return 0; nfsi = NFS_I(inode); - if (entry->fattr->fileid == nfsi->fileid) - return 1; - if (nfs_compare_fh(entry->fh, &nfsi->fh) == 0) - return 1; - return 0; + if (entry->fattr->fileid != nfsi->fileid) + return 0; + if (entry->fh->size && nfs_compare_fh(entry->fh, &nfsi->fh) != 0) + return 0; + return 1; } static @@ -517,6 +517,8 @@ again: &entry->fattr->fsid)) goto out; if (nfs_same_file(dentry, entry)) { + if (!entry->fh->size) + goto out; nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); status = nfs_refresh_inode(d_inode(dentry), entry->fattr); if (!status) @@ -529,6 +531,10 @@ again: goto again; } } + if (!entry->fh->size) { + d_lookup_done(dentry); + goto out; + } inode = nfs_fhget(dentry->d_sb, entry->fh, entry->fattr, entry->label); alias = d_splice_alias(inode, dentry); Patches currently in stable-queue which might be from trond.myklebust@primarydata.com are queue-4.8/nfsv4-don-t-report-revoked-delegations-as-valid-in-nfs_have_delegation.patch queue-4.8/nfs-fix-inode-corruption-in-nfs_prime_dcache.patch queue-4.8/nfsv4.2-fix-a-reference-leak-in-nfs42_proc_layoutstats_generic.patch queue-4.8/nfsv4-open-state-recovery-must-account-for-file-permission-changes.patch queue-4.8/nfsv4-nfs4_copy_delegation_stateid-must-fail-if-the-delegation-is-invalid.patch