From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kara Subject: Re: [PATCH 1/5 v2] vfs: Avoid creation of directory loops for corrupted filesystems Date: Thu, 28 Jun 2012 10:30:41 +0200 Message-ID: <20120628083041.GA18478@quack.suse.cz> References: <1340225920-29379-1-git-send-email-jack@suse.cz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-fsdevel@vger.kernel.org, Jan Kara , "J. Bruce Fields" To: Al Viro Return-path: Received: from cantor2.suse.de ([195.135.220.15]:50421 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932289Ab2F1Ian (ORCPT ); Thu, 28 Jun 2012 04:30:43 -0400 Content-Disposition: inline In-Reply-To: <1340225920-29379-1-git-send-email-jack@suse.cz> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Wed 20-06-12 22:58:36, Jan Kara wrote: > When a directory hierarchy is corrupted (e. g. due to a bit flip on the media), > it can happen that it contains loops of directories. That creates possibilities > for deadlock when locking directories. > > Fix the problem by checking in d_splice_alias() that when we splice a > directory, it does not have any other connected alias. Al, any opinion on this patch series? Honza > Reported-by: Sami Liedes > CC: "J. Bruce Fields" > Signed-off-by: Jan Kara > --- > fs/dcache.c | 5 +++++ > 1 files changed, 5 insertions(+), 0 deletions(-) > > Sorry guys, I'm resending this again because I messed up list address > previously. > > diff --git a/fs/dcache.c b/fs/dcache.c > index 4046904..afe81fe 100644 > --- a/fs/dcache.c > +++ b/fs/dcache.c > @@ -1658,6 +1658,11 @@ struct dentry *d_splice_alias(struct inode *inode, struct dentry *dentry) > d_move(new, dentry); > iput(inode); > } else { > + if (unlikely(!list_empty(&inode->i_dentry))) { > + spin_unlock(&inode->i_lock); > + iput(inode); > + return ERR_PTR(-EIO); > + } > /* already taking inode->i_lock, so d_add() by hand */ > __d_instantiate(dentry, inode); > spin_unlock(&inode->i_lock); > -- > 1.7.1 > -- Jan Kara SUSE Labs, CR