f2fs: fix to avoid overflow when left shifting page offset
authorChao Yu <yuchao0@huawei.com>
Wed, 25 Jan 2017 02:52:39 +0000 (10:52 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Thu, 23 Feb 2017 04:24:51 +0000 (20:24 -0800)
We use following method to calculate size with current page index:
size = index << PAGE_SHIFT
If type of index has only 32-bits size, left shifting will incur overflow,
which makes result incorrect.

So let's cast index with 64-bits type to avoid such issue.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/recovery.c

index 4fb4471..e93316e 100644 (file)
@@ -428,8 +428,9 @@ retry_dn:
                }
 
                if (!file_keep_isize(inode) &&
-                               (i_size_read(inode) <= (start << PAGE_SHIFT)))
-                       f2fs_i_size_write(inode, (start + 1) << PAGE_SHIFT);
+                       (i_size_read(inode) <= ((loff_t)start << PAGE_SHIFT)))
+                       f2fs_i_size_write(inode,
+                               (loff_t)(start + 1) << PAGE_SHIFT);
 
                /*
                 * dest is reserved block, invalidate src block