From: Ted Ts'o <tytso@mit.edu>
To: Andreas Dilger <adilger@dilger.ca>
Cc: linux-fsdevel@vger.kernel.org,
Ext4 Developers List <linux-ext4@vger.kernel.org>,
viro@ZenIV.linux.org.uk, sami.liedes@iki.fi
Subject: Re: [PATCH] vfs: avoid hang caused by attempting to rmdir an invalid file system
Date: Mon, 28 May 2012 17:05:11 -0400 [thread overview]
Message-ID: <20120528210511.GA5610@thunk.org> (raw)
In-Reply-To: <4790434C-0DF2-4186-BE4C-CE97633F107C@dilger.ca>
On Mon, May 28, 2012 at 02:29:05PM -0600, Andreas Dilger wrote:
> This patch is good from the POV of covering all filesystems, and
> avoiding the deadlock at the dcache level. It would be possible to
> detect this problem in the filesystem itself during lookup, before
> the bad link got into the dcache itself. Something like:
I like that as a solution for detecting the problem in ext4. As you
say, it's still an issue for other file systems, and so the patch I
proposed is still probably a good idea for the VFS. But this way ext4
(and ext3 when Jan backports it) will be able to detect the problem
and mark the file system as being corrupted.
Andreas, are you ok with the Signed-off-by? I gave you credit since
the patch is yours... (and do you want me to use the dilger.ca or the
whamcloud.com domain)?
Regards,
- Ted
commit bfd0ca03af12fa1dc439b57f65828dde2e7530e2
Author: Andreas Dilger <adilger@dilger.ca>
Date: Mon May 28 17:02:25 2012 -0400
ext4: disallow hard-linked directory in ext4_lookup
A hard-linked directory to its parent can cause the VFS to deadlock,
and is a sign of a corrupted file system. So detect this case in
ext4_lookup(), before the rmdir() lockup scenario can take place.
Signed-off-by: Andreas Dilger <adilger@dilger.ca>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index a9fd5f4..5f4a030 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -1330,6 +1330,12 @@ static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, stru
EXT4_ERROR_INODE(dir, "bad inode number: %u", ino);
return ERR_PTR(-EIO);
}
+ if (ino == dir->i_ino) {
+ EXT4_ERROR_INODE(dir, "'%.*s' linked to parent dir",
+ dentry->d_name.len,
+ dentry->d_name.name);
+ return ERR_PTR(-EIO);
+ }
inode = ext4_iget(dir->i_sb, ino);
if (inode == ERR_PTR(-ESTALE)) {
EXT4_ERROR_INODE(dir,
next prev parent reply other threads:[~2012-05-28 21:05 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-28 17:33 [PATCH] vfs: avoid hang caused by attempting to rmdir an invalid file system Theodore Ts'o
2012-05-28 20:29 ` Andreas Dilger
2012-05-28 21:05 ` Ted Ts'o [this message]
2012-05-29 19:50 ` Jan Kara
2012-05-29 20:08 ` Jan Kara
2012-05-30 17:37 ` J. Bruce Fields
2012-05-30 20:12 ` Jan Kara
2012-06-18 21:19 ` J. Bruce Fields
2012-06-20 9:57 ` Jan Kara
2012-05-29 8:21 ` Greg KH
2012-05-29 12:18 ` Ted Ts'o
2012-05-29 11:25 ` Bernd Schubert
[not found] <20120528173133.GA31109@thunk.org>
2012-05-28 17:34 ` Theodore Ts'o
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120528210511.GA5610@thunk.org \
--to=tytso@mit.edu \
--cc=adilger@dilger.ca \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=sami.liedes@iki.fi \
--cc=viro@ZenIV.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).