Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d8adb9cef7e406a9a82881695097c702bc98422f
Commit:     d8adb9cef7e406a9a82881695097c702bc98422f
Parent:     23c887522e912ca494950796a95df8dd210f4b01
Author:     Eric Sandeen <[EMAIL PROTECTED]>
AuthorDate: Sat Feb 10 01:45:06 2007 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Sun Feb 11 10:51:28 2007 -0800

    [PATCH] ext2: skip pages past number of blocks in ext2_find_entry
    
    This one was pointed out on the MOKB site:
    
http://kernelfun.blogspot.com/2006/11/mokb-09-11-2006-linux-26x-ext2checkpage.html
    
    If a directory's i_size is corrupted, ext2_find_entry() will keep
    processing pages until the i_size is reached, even if there are no more
    blocks associated with the directory inode.  This patch puts in some
    minimal sanity-checking so that we don't keep checking pages (and issuing
    errors) if we know there can be no more data to read, based on the block
    count of the directory inode.
    
    This is somewhat similar in approach to the ext3 patch I sent earlier this
    year.
    
    Signed-off-by: Eric Sandeen <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 fs/ext2/dir.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/fs/ext2/dir.c b/fs/ext2/dir.c
index 0b02ba9..e89bfc8 100644
--- a/fs/ext2/dir.c
+++ b/fs/ext2/dir.c
@@ -368,6 +368,14 @@ struct ext2_dir_entry_2 * ext2_find_entry (struct inode * 
dir,
                }
                if (++n >= npages)
                        n = 0;
+               /* next page is past the blocks we've got */
+               if (unlikely(n > (dir->i_blocks >> (PAGE_CACHE_SHIFT - 9)))) {
+                       ext2_error(dir->i_sb, __FUNCTION__,
+                               "dir %lu size %lld exceeds block count %llu",
+                               dir->i_ino, dir->i_size,
+                               (unsigned long long)dir->i_blocks);
+                       goto out;
+               }
        } while (n != start);
 out:
        return NULL;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to