From mboxrd@z Thu Jan 1 00:00:00 1970 From: "J. Bruce Fields" Subject: [PATCH 11/11] dcache: d_splice_alias should detect loops Date: Wed, 4 Jun 2014 17:21:03 -0400 Message-ID: <1401916863-7916-12-git-send-email-bfields@redhat.com> References: <1401916863-7916-1-git-send-email-bfields@redhat.com> Cc: Christoph Hellwig , linux-fsdevel@vger.kernel.org, "J. Bruce Fields" To: Al Viro Return-path: Received: from fieldses.org ([174.143.236.118]:48795 "EHLO fieldses.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751802AbaFDVVd (ORCPT ); Wed, 4 Jun 2014 17:21:33 -0400 In-Reply-To: <1401916863-7916-1-git-send-email-bfields@redhat.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: From: "J. Bruce Fields" I believe this can only happen in the case of a corrupted filesystem. So -EIO looks like the appropriate error. Signed-off-by: J. Bruce Fields --- fs/dcache.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fs/dcache.c b/fs/dcache.c index 960a2e7..f6ab71b 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -2643,6 +2643,11 @@ struct dentry *d_splice_alias(struct inode *inode, struct dentry *dentry) dput(new); return ERR_PTR(-EIO); } + if (d_ancestor(new, dentry)) { + spin_unlock(&inode->i_lock); + dput(new); + return ERR_PTR(-EIO); + } write_seqlock(&rename_lock); __d_materialise_dentry(dentry, new); write_sequnlock(&rename_lock); -- 1.7.9.5