The crc_offset towards or beyond the end of block is wrong,
sanity check it.
Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
cp = (struct f2fs_checkpoint *)cp_page_1;
crc_offset = get_cp(checksum_offset);
- if (crc_offset >= blk_size)
+ if (crc_offset > (blk_size - sizeof(__le32)))
goto invalid_cp1;
crc = le32_to_cpu(*(__le32 *)((unsigned char *)cp + crc_offset));
cp = (struct f2fs_checkpoint *)cp_page_2;
crc_offset = get_cp(checksum_offset);
- if (crc_offset >= blk_size)
+ if (crc_offset > (blk_size - sizeof(__le32)))
goto invalid_cp2;
crc = le32_to_cpu(*(__le32 *)((unsigned char *)cp + crc_offset));