ext4: fix off-by-in in loop termination in ext4_find_unwritten_pgoff()
authorJan Kara <jack@suse.cz>
Mon, 22 May 2017 02:34:23 +0000 (22:34 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 22 May 2017 02:34:23 +0000 (22:34 -0400)
There is an off-by-one error in loop termination conditions in
ext4_find_unwritten_pgoff() since 'end' may index a page beyond end of
desired range if 'endoff' is page aligned. It doesn't have any visible
effects but still it is good to fix it.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/file.c

index bbea2dccd584384cafb7b2f1730baab05cd2d46f..2b00bf84c05bca35f13eb671b56ac2cdb17048f4 100644 (file)
@@ -474,7 +474,7 @@ static int ext4_find_unwritten_pgoff(struct inode *inode,
        endoff = (loff_t)end_blk << blkbits;
 
        index = startoff >> PAGE_SHIFT;
-       end = endoff >> PAGE_SHIFT;
+       end = (endoff - 1) >> PAGE_SHIFT;
 
        pagevec_init(&pvec, 0);
        do {