aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOGAWA Hirofumi <[email protected]>2018-06-14 15:27:21 -0700
committerLinus Torvalds <[email protected]>2018-06-15 07:55:24 +0900
commitc2574aaa5d98684519f0dfa64abe6896aeb124c6 (patch)
tree413fcee242da40fce2775ff29838ed899798d656
parent26b95137d673d8d6a9a124d433d968e18298f4ed (diff)
fat: use fat_fs_error() instead of BUG_ON() in __fat_get_block()
If file size and FAT cluster chain is not matched (corrupted image), we can hit BUG_ON(!phys) in __fat_get_block(). So, use fat_fs_error() instead. [[email protected]: fix printk warning] Link: http://lkml.kernel.org/r/[email protected] Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: OGAWA Hirofumi <[email protected]> Reported-by: Anatoly Trosinenko <[email protected]> Tested-by: Anatoly Trosinenko <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
-rw-r--r--fs/fat/inode.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/fat/inode.c b/fs/fat/inode.c
index ffbbf0520d9e..4f818f7fa155 100644
--- a/fs/fat/inode.c
+++ b/fs/fat/inode.c
@@ -158,8 +158,14 @@ static inline int __fat_get_block(struct inode *inode, sector_t iblock,
err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create, false);
if (err)
return err;
+ if (!phys) {
+ fat_fs_error(sb,
+ "invalid FAT chain (i_pos %lld, last_block %llu)",
+ MSDOS_I(inode)->i_pos,
+ (unsigned long long)last_block);
+ return -EIO;
+ }
- BUG_ON(!phys);
BUG_ON(*max_blocks != mapped_blocks);
set_buffer_new(bh_result);
map_bh(bh_result, sb, phys);