All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] vfs: avoid hang caused by attempting to rmdir an invalid file system
@ 2012-05-28 17:33 Theodore Ts'o
  2012-05-28 20:29 ` Andreas Dilger
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Theodore Ts'o @ 2012-05-28 17:33 UTC (permalink / raw)
  To: linux-fsdevel; +Cc: Ext4 Developers List, viro, sami.liedes, Theodore Ts'o

If we rmdir a directory which is a hard link to '.', we will deadlock
trying to grab the directory's i_mutex.  Check for this condition and
return EINVAL, which is what we return if the user attempts to rmdir
"/foo/bar/."

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
---
 fs/namei.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/fs/namei.c b/fs/namei.c
index 0062dd1..081f872 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -2774,6 +2774,17 @@ static long do_rmdir(int dfd, const char __user *pathname)
 		error = -ENOENT;
 		goto exit3;
 	}
+	if (nd.path.dentry->d_inode == dentry->d_inode) {
+		/*
+		 * Corrupt file system where there is a symlink to
+		 * '.'; treat it as if we are trying to rmdir '.'
+		 *
+		 * XXX Should we call into the low-level file system
+		 * to request that the file system be marked corrupt?
+		 */
+		error = -EINVAL;
+		goto exit3;
+	}
 	error = mnt_want_write(nd.path.mnt);
 	if (error)
 		goto exit3;
-- 
1.7.10.2.552.gaa3bb87


^ permalink raw reply related	[flat|nested] 13+ messages in thread
* Re: ext2 hang on (intentionally) corrupted filesystem
@ 2012-05-28 17:31 Ted Ts'o
  2012-05-28 17:34 ` [PATCH] vfs: avoid hang caused by attempting to rmdir an invalid file system Theodore Ts'o
  0 siblings, 1 reply; 13+ messages in thread
From: Ted Ts'o @ 2012-05-28 17:31 UTC (permalink / raw)
  To: Jan Kara; +Cc: Sami Liedes, linux-ext4, linux-fsdev, Al Viro

On Wed, May 09, 2012 at 11:12:36PM +0200, Jan Kara wrote:
> > 1. wget http://sli.dy.fi/~sliedes/berserker/testcases/ext2.110.min.bz2
> > 2. mount ... /mnt -t ext2 -o errors=continue
> > 3. Do some operations; what I do (it's the rm that crashes):
> >   timeout 30 rm -rf /mnt/* >&/dev/null
> > 4. The rm task hangs
> > 
>   OK, you've changed '.' directory entry to a normal directory entry with a
> name 0x6e. I guess that has some potential in confusing something. Actually
> rm -rf does not reproduce the problem for me (it just complains about
> cyclic directory hierarchy) but trying to rmdir bad entry hangs the system
> - we try to grab i_mutex for the directory twice because the directory is
> it's own parent... That would be kind of hard to fix in VFS since once our
> directory structure contains a cycle, our locking protocol is no longer
> deadlock free. I'll see what we could do...

Just wanted to chime in that this crashes when the file system is
mounted using ext4; not surprising, since it's clearly a VFS issue.

The following proof-of-concept patch (see reply chained to this mail
message) fixes the problem for your test file system.  Al, what do you
think?  Is it worth it to define a new mechanism where we can pass
VFS-detected corruption down to the low-level file system?

						- Ted

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2012-06-20  9:57 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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
  -- strict thread matches above, loose matches on Subject: below --
2012-05-28 17:31 ext2 hang on (intentionally) corrupted filesystem Ted Ts'o
2012-05-28 17:34 ` [PATCH] vfs: avoid hang caused by attempting to rmdir an invalid file system Theodore Ts'o

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.