linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] isofs: mounting to regular file may succeed
@ 2007-07-13 23:47 Kirill Kuvaldin
  2007-07-14  8:57 ` Kirill Kuvaldin
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Kirill Kuvaldin @ 2007-07-13 23:47 UTC (permalink / raw)
  To: linux-fsdevel; +Cc: linux-kernel

It turned out that mounting a corrupted ISO image to a regular file may
succeed, e.g. if an image was prepared as follows:

$ dd if=correct.iso of=bad.iso bs=4k count=8

We then can mount it to a regular file:

# mount -o loop -t iso9660 bad.iso /tmp/file

But mounting it to a directory fails with -ENOTDIR, simply because 
the root directory inode doesn't have S_IFDIR set and the condition
in graft_tree() is met:

	if (S_ISDIR(nd->dentry->d_inode->i_mode) !=
	      S_ISDIR(mnt->mnt_root->d_inode->i_mode))
		return -ENOTDIR

This is because the root directory inode was read from an incorrect
block. It's supposed to be read from sbi->s_firstdatazone, which is
an absolute value and gets messed up in the case of an incorrect image.

In order to somehow circumvent this we have to check that the root
directory inode is actually a directory after all.


Signed-off-by: Kirill Kuvaldin <kuvkir@epsmu.com>

diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
index 5c3eecf..ce5062a 100644
--- a/fs/isofs/inode.c
+++ b/fs/isofs/inode.c
@@ -840,6 +840,15 @@ root_found:
 		goto out_no_root;
 	if (!inode->i_op)
 		goto out_bad_root;
+
+	/* Make sure the root inode is a directory */
+	if (!S_ISDIR(inode->i_mode)) {
+		printk(KERN_WARNING
+			"isofs_fill_super: root inode is not a directory. "
+			"Corrupted media?\n");
+		goto out_iput;
+	}
+
 	/* get the root dentry */
 	s->s_root = d_alloc_root(inode);
 	if (!(s->s_root))

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

end of thread, other threads:[~2007-07-17  7:45 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-13 23:47 [PATCH] isofs: mounting to regular file may succeed Kirill Kuvaldin
2007-07-14  8:57 ` Kirill Kuvaldin
2007-07-14 19:16 ` Jan Engelhardt
2007-07-15  9:36   ` Kirill Kuvaldin
2007-07-17  7:04 ` Andrew Morton
2007-07-17  7:08   ` Christoph Hellwig
2007-07-17  7:45   ` Al Viro

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).