lkml.org 
[lkml]   [2022]   [Apr]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 886/913] ubi: fastmap: Return error code if memory allocation fails in add_aeb()
    Date
    From: Zhihao Cheng <chengzhihao1@huawei.com>

    commit c3c07fc25f37c157fde041b3a0c3dfcb1590cbce upstream.

    Abort fastmap scanning and return error code if memory allocation fails
    in add_aeb(). Otherwise ubi will get wrong peb statistics information
    after scanning.

    Fixes: dbb7d2a88d2a7b ("UBI: Add fastmap core")
    Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/mtd/ubi/fastmap.c | 28 +++++++++++++++++++---------
    1 file changed, 19 insertions(+), 9 deletions(-)

    --- a/drivers/mtd/ubi/fastmap.c
    +++ b/drivers/mtd/ubi/fastmap.c
    @@ -468,7 +468,9 @@ static int scan_pool(struct ubi_device *
    if (err == UBI_IO_FF_BITFLIPS)
    scrub = 1;

    - add_aeb(ai, free, pnum, ec, scrub);
    + ret = add_aeb(ai, free, pnum, ec, scrub);
    + if (ret)
    + goto out;
    continue;
    } else if (err == 0 || err == UBI_IO_BITFLIPS) {
    dbg_bld("Found non empty PEB:%i in pool", pnum);
    @@ -638,8 +640,10 @@ static int ubi_attach_fastmap(struct ubi
    if (fm_pos >= fm_size)
    goto fail_bad;

    - add_aeb(ai, &ai->free, be32_to_cpu(fmec->pnum),
    - be32_to_cpu(fmec->ec), 0);
    + ret = add_aeb(ai, &ai->free, be32_to_cpu(fmec->pnum),
    + be32_to_cpu(fmec->ec), 0);
    + if (ret)
    + goto fail;
    }

    /* read EC values from used list */
    @@ -649,8 +653,10 @@ static int ubi_attach_fastmap(struct ubi
    if (fm_pos >= fm_size)
    goto fail_bad;

    - add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
    - be32_to_cpu(fmec->ec), 0);
    + ret = add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
    + be32_to_cpu(fmec->ec), 0);
    + if (ret)
    + goto fail;
    }

    /* read EC values from scrub list */
    @@ -660,8 +666,10 @@ static int ubi_attach_fastmap(struct ubi
    if (fm_pos >= fm_size)
    goto fail_bad;

    - add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
    - be32_to_cpu(fmec->ec), 1);
    + ret = add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
    + be32_to_cpu(fmec->ec), 1);
    + if (ret)
    + goto fail;
    }

    /* read EC values from erase list */
    @@ -671,8 +679,10 @@ static int ubi_attach_fastmap(struct ubi
    if (fm_pos >= fm_size)
    goto fail_bad;

    - add_aeb(ai, &ai->erase, be32_to_cpu(fmec->pnum),
    - be32_to_cpu(fmec->ec), 1);
    + ret = add_aeb(ai, &ai->erase, be32_to_cpu(fmec->pnum),
    + be32_to_cpu(fmec->ec), 1);
    + if (ret)
    + goto fail;
    }

    ai->mean_ec = div_u64(ai->ec_sum, ai->ec_count);

    \
     
     \ /
      Last update: 2022-04-05 23:25    [W:2.878 / U:0.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site