[PATCH] avoid semi-infinite loop when mounting bad ext2

From: Andries Brouwer
Date: Wed Nov 03 2004 - 18:35:03 EST


The routine ext2_readdir() will, when reading a directory page
returns an error, try the next page, without reporting the
error to user space. That is bad, and the patch below changes that.

In my case the filesystem was damaged, and ext2_readdir wanted
to read 60000+ pages and wrote as many error messages to syslog
("attempt to access beyond end"), not what one wants.

Andries

[no doubt a similar patch is appropriate for ext3]


diff -uprN -X /linux/dontdiff a/fs/ext2/dir.c b/fs/ext2/dir.c
--- a/fs/ext2/dir.c 2004-10-30 21:44:02.000000000 +0200
+++ b/fs/ext2/dir.c 2004-11-04 00:14:14.000000000 +0100
@@ -275,7 +275,8 @@ ext2_readdir (struct file * filp, void *
"bad page in #%lu",
inode->i_ino);
filp->f_pos += PAGE_CACHE_SIZE - offset;
- continue;
+ ret = -EIO;
+ goto done;
}
kaddr = page_address(page);
if (need_revalidate) {
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/