]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
libext2fs: ind_punch() must not stop examining blocks prematurely
authorDarrick J. Wong <darrick.wong@oracle.com>
Mon, 7 Oct 2013 13:51:35 +0000 (09:51 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 7 Oct 2013 13:51:35 +0000 (09:51 -0400)
When we're iterating the main loop in ind_punch(), "offset" tracks how
far we've progressed into the block map, "start" tells us where to
start punching, and "count" tells us how many blocks we are to punch
after "start".  Therefore, we would like to break out of the loop once
the "offset" that we're looking at has progressed past the end of the
punch range.  Unfortunately, if start !=0, the if-break clause in the
loop causes us to break out of the loop early.

Therefore, change the breakout test to terminate the loop at the
correct time.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
lib/ext2fs/punch.c

index aac194228511f7aad9895ee4358e6cfe1fbe1e3d..092940042c4e6898ee537a995d38b6d6c5c24a04 100644 (file)
@@ -60,7 +60,7 @@ static errcode_t ind_punch(ext2_filsys fs, struct ext2_inode *inode,
 #endif
        incr = 1 << ((EXT2_BLOCK_SIZE_BITS(fs->super)-2)*level);
        for (i=0, offset=0; i < max; i++, p++, offset += incr) {
-               if (offset > count)
+               if (offset >= start + count)
                        break;
                if (*p == 0 || (offset+incr) <= start)
                        continue;