[PATCH] ubi: correct the calculation of fastmap size
Zhihao Cheng
chengzhihao1 at huawei.com
Mon Feb 19 20:26:50 PST 2024
在 2024/2/20 10:49, Zhang Yi 写道:
> From: Zhang Yi <yi.zhang at huawei.com>
>
> Now that the calculation of fastmap size in ubi_calc_fm_size() is
> incorrect since it miss each user volume's ubi_fm_eba structure and the
> Internal UBI volume info. Let's correct the calculation.
>
> Cc: stable at vger.kernel.org
> Signed-off-by: Zhang Yi <yi.zhang at huawei.com>
> ---
> drivers/mtd/ubi/fastmap.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
Looks like the assertion 'ubi_assert(fm_pos <= ubi->fm_size)' has never
failed in the real world, maybe the missing calculated size is too small
(sizeof(struct ubi_fm_eba) * 129 = 8 * 129 = 1032) and hard to trigger
an effective problem, or no one will create many volumes.
I have tested on several types of flashes, all ubi tests(from mtd-utils)
are passed.
Reviewed-by: Zhihao Cheng <chengzhihao1 at huawei.com>
>
> diff --git a/drivers/mtd/ubi/fastmap.c b/drivers/mtd/ubi/fastmap.c
> index 2a728c31e6b8..9a4940874be5 100644
> --- a/drivers/mtd/ubi/fastmap.c
> +++ b/drivers/mtd/ubi/fastmap.c
> @@ -85,9 +85,10 @@ size_t ubi_calc_fm_size(struct ubi_device *ubi)
> sizeof(struct ubi_fm_scan_pool) +
> sizeof(struct ubi_fm_scan_pool) +
> (ubi->peb_count * sizeof(struct ubi_fm_ec)) +
> - (sizeof(struct ubi_fm_eba) +
> - (ubi->peb_count * sizeof(__be32))) +
> - sizeof(struct ubi_fm_volhdr) * UBI_MAX_VOLUMES;
> + ((sizeof(struct ubi_fm_eba) +
> + sizeof(struct ubi_fm_volhdr)) *
> + (UBI_MAX_VOLUMES + UBI_INT_VOL_COUNT)) +
> + (ubi->peb_count * sizeof(__be32));
> return roundup(size, ubi->leb_size);
> }
>
>
More information about the linux-mtd
mailing list