ext4: avoid stamping on other memories in ext4_ext_insert_index()
authorTao Ma <boyu.mt@taobao.com>
Mon, 17 Oct 2011 14:13:46 +0000 (10:13 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 17 Oct 2011 14:13:46 +0000 (10:13 -0400)
Add a sanity check to make sure ix hasn't gone beyond the valid bounds
of the extent block.

Signed-off-by: Tao Ma <boyu.mt@taobao.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/extents.c

index f473ddf0bd949f477db42d7f7145c412b67dc815..5c4861210d4c9f97b201623a03366b27d8b37eca 100644 (file)
@@ -779,6 +779,11 @@ static int ext4_ext_insert_index(handle_t *handle, struct inode *inode,
                ix = curp->p_idx;
        }
 
+       if (unlikely(ix > EXT_MAX_INDEX(curp->p_hdr))) {
+               EXT4_ERROR_INODE(inode, "ix > EXT_MAX_INDEX!");
+               return -EIO;
+       }
+
        ix->ei_block = cpu_to_le32(logical);
        ext4_idx_store_pblock(ix, ptr);
        le16_add_cpu(&curp->p_hdr->eh_entries, 1);