lkml.org 
[lkml]   [2022]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 179/389] memstick/ms_block: Fix some incorrect memory allocation
    Date
    From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

    [ Upstream commit 2e531bc3e0d86362fcd8a577b3278d9ef3cc2ba0 ]

    Some functions of the bitmap API take advantage of the fact that a bitmap
    is an array of long.

    So, to make sure this assertion is correct, allocate bitmaps with
    bitmap_zalloc() instead of kzalloc()+hand-computed number of bytes.

    While at it, also use bitmap_free() instead of kfree() to keep the
    semantic.

    Fixes: 0ab30494bc4f ("memstick: add support for legacy memorysticks")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Link: https://lore.kernel.org/r/dbf633c48c24ae6d95f852557e8d8b3bbdef65fe.1656155715.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/memstick/core/ms_block.c | 10 +++++-----
    1 file changed, 5 insertions(+), 5 deletions(-)

    diff --git a/drivers/memstick/core/ms_block.c b/drivers/memstick/core/ms_block.c
    index 55907e4c36b1..399510585245 100644
    --- a/drivers/memstick/core/ms_block.c
    +++ b/drivers/memstick/core/ms_block.c
    @@ -1335,17 +1335,17 @@ static int msb_ftl_initialize(struct msb_data *msb)
    msb->zone_count = msb->block_count / MS_BLOCKS_IN_ZONE;
    msb->logical_block_count = msb->zone_count * 496 - 2;

    - msb->used_blocks_bitmap = kzalloc(msb->block_count / 8, GFP_KERNEL);
    - msb->erased_blocks_bitmap = kzalloc(msb->block_count / 8, GFP_KERNEL);
    + msb->used_blocks_bitmap = bitmap_zalloc(msb->block_count, GFP_KERNEL);
    + msb->erased_blocks_bitmap = bitmap_zalloc(msb->block_count, GFP_KERNEL);
    msb->lba_to_pba_table =
    kmalloc_array(msb->logical_block_count, sizeof(u16),
    GFP_KERNEL);

    if (!msb->used_blocks_bitmap || !msb->lba_to_pba_table ||
    !msb->erased_blocks_bitmap) {
    - kfree(msb->used_blocks_bitmap);
    + bitmap_free(msb->used_blocks_bitmap);
    + bitmap_free(msb->erased_blocks_bitmap);
    kfree(msb->lba_to_pba_table);
    - kfree(msb->erased_blocks_bitmap);
    return -ENOMEM;
    }

    @@ -1953,7 +1953,7 @@ static int msb_bd_open(struct block_device *bdev, fmode_t mode)
    static void msb_data_clear(struct msb_data *msb)
    {
    kfree(msb->boot_page);
    - kfree(msb->used_blocks_bitmap);
    + bitmap_free(msb->used_blocks_bitmap);
    kfree(msb->lba_to_pba_table);
    kfree(msb->cache);
    msb->card = NULL;
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-23 13:35    [W:4.154 / U:0.296 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site