memstick/ms_block: Fix some incorrect memory allocation
[ 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: 0ab30494bc
("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>
This commit is contained in:
parent
4c472a2c9e
commit
830c38ec9a
@ -1335,17 +1335,17 @@ static int msb_ftl_initialize(struct msb_data *msb)
|
|||||||
msb->zone_count = msb->block_count / MS_BLOCKS_IN_ZONE;
|
msb->zone_count = msb->block_count / MS_BLOCKS_IN_ZONE;
|
||||||
msb->logical_block_count = msb->zone_count * 496 - 2;
|
msb->logical_block_count = msb->zone_count * 496 - 2;
|
||||||
|
|
||||||
msb->used_blocks_bitmap = kzalloc(msb->block_count / 8, GFP_KERNEL);
|
msb->used_blocks_bitmap = bitmap_zalloc(msb->block_count, GFP_KERNEL);
|
||||||
msb->erased_blocks_bitmap = kzalloc(msb->block_count / 8, GFP_KERNEL);
|
msb->erased_blocks_bitmap = bitmap_zalloc(msb->block_count, GFP_KERNEL);
|
||||||
msb->lba_to_pba_table =
|
msb->lba_to_pba_table =
|
||||||
kmalloc_array(msb->logical_block_count, sizeof(u16),
|
kmalloc_array(msb->logical_block_count, sizeof(u16),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
|
|
||||||
if (!msb->used_blocks_bitmap || !msb->lba_to_pba_table ||
|
if (!msb->used_blocks_bitmap || !msb->lba_to_pba_table ||
|
||||||
!msb->erased_blocks_bitmap) {
|
!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->lba_to_pba_table);
|
||||||
kfree(msb->erased_blocks_bitmap);
|
|
||||||
return -ENOMEM;
|
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)
|
static void msb_data_clear(struct msb_data *msb)
|
||||||
{
|
{
|
||||||
kfree(msb->boot_page);
|
kfree(msb->boot_page);
|
||||||
kfree(msb->used_blocks_bitmap);
|
bitmap_free(msb->used_blocks_bitmap);
|
||||||
kfree(msb->lba_to_pba_table);
|
kfree(msb->lba_to_pba_table);
|
||||||
kfree(msb->cache);
|
kfree(msb->cache);
|
||||||
msb->card = NULL;
|
msb->card = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user