mirror of
https://gitee.com/openharmony/third_party_f2fs-tools
synced 2024-11-26 19:51:32 +00:00
fsck.f2fs: fix sanity check logic for cp_payload
cp_payload is set differently [1] when extended node bitmap feature is enabled. Commitb79c3ba4ea
broke fsck on f2fs file systems created on 2+ TB device with extended node bitmap feature enabled. As the sanity check is for checking overflows, fix this to assume the max possible cp_payload size under the extended node bitmap. Link: https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git/tree/mkfs/f2fs_format.c?h=v1.15.0#n372 [1] Fixes:b79c3ba4ea
("fsck.f2fs: sanity check cp_payload before reading checkpoint") Reported-by: Alexander Koskovich <akoskovich@pm.me> Signed-off-by: Juhyung Park <qkrwngud825@gmail.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
7835032f2c
commit
7a64f18f69
@ -1248,7 +1248,7 @@ int get_valid_checkpoint(struct f2fs_sb_info *sbi)
|
||||
int ret;
|
||||
|
||||
cp_payload = get_sb(cp_payload);
|
||||
if (cp_payload > F2FS_BLK_ALIGN(MAX_SIT_BITMAP_SIZE))
|
||||
if (cp_payload > F2FS_BLK_ALIGN(MAX_CP_PAYLOAD))
|
||||
return -EINVAL;
|
||||
|
||||
cp_blks = 1 + cp_payload;
|
||||
|
@ -1168,6 +1168,10 @@ static_assert(sizeof(struct f2fs_nat_block) == 4095, "");
|
||||
#define MAX_SIT_BITMAP_SIZE (SEG_ALIGN(SIZE_ALIGN(F2FS_MAX_SEGMENT, \
|
||||
SIT_ENTRY_PER_BLOCK)) * \
|
||||
c.blks_per_seg / 8)
|
||||
#define MAX_CP_PAYLOAD (SEG_ALIGN(SIZE_ALIGN(UINT32_MAX, NAT_ENTRY_PER_BLOCK)) * \
|
||||
DEFAULT_NAT_ENTRY_RATIO / 100 * \
|
||||
c.blks_per_seg / 8 + \
|
||||
MAX_SIT_BITMAP_SIZE - MAX_BITMAP_SIZE_IN_CKPT)
|
||||
|
||||
/*
|
||||
* Note that f2fs_sit_entry->vblocks has the following bit-field information.
|
||||
|
Loading…
Reference in New Issue
Block a user