diff -urpN --exclude-from=/home/davej/.exclude bk-linus/fs/ext2/balloc.c linux-2.5/fs/ext2/balloc.c --- bk-linus/fs/ext2/balloc.c 2002-11-21 02:19:57.000000000 +0000 +++ linux-2.5/fs/ext2/balloc.c 2002-11-21 18:02:05.000000000 +0000 @@ -178,8 +178,9 @@ void ext2_free_blocks (struct inode * in lock_super (sb); es = EXT2_SB(sb)->s_es; - if (block < le32_to_cpu(es->s_first_data_block) || - (block + count) > le32_to_cpu(es->s_blocks_count)) { + if (block < le32_to_cpu(es->s_first_data_block) || + block + count < block || + block + count > le32_to_cpu(es->s_blocks_count)) { ext2_error (sb, "ext2_free_blocks", "Freeing blocks not in datazone - " "block = %lu, count = %lu", block, count); diff -urpN --exclude-from=/home/davej/.exclude bk-linus/fs/ext3/balloc.c linux-2.5/fs/ext3/balloc.c --- bk-linus/fs/ext3/balloc.c 2002-11-21 02:19:59.000000000 +0000 +++ linux-2.5/fs/ext3/balloc.c 2002-11-21 18:02:06.000000000 +0000 @@ -120,8 +120,9 @@ void ext3_free_blocks (handle_t *handle, } lock_super (sb); es = EXT3_SB(sb)->s_es; - if (block < le32_to_cpu(es->s_first_data_block) || - (block + count) > le32_to_cpu(es->s_blocks_count)) { + if (block < le32_to_cpu(es->s_first_data_block) || + block + count < block || + block + count >= le32_to_cpu(es->s_blocks_count)) { ext3_error (sb, "ext3_free_blocks", "Freeing blocks not in datazone - " "block = %lu, count = %lu", block, count);