mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-09 00:36:51 -04:00
btrfs: use kmalloc_array() for open-coded arithmetic in kmalloc()
As pointed out in the documentation, calling 'kmalloc' with open-coded arithmetic can lead to unfortunate overflows and this particular way of using it has been deprecated. Instead, it's preferred to use 'kmalloc_array' in cases where it might apply so an overflow check is performed. Note this is an API cleanup and is not fixing any overflows because in all cases the multipliers are bounded small numbers derived from number of items in leaves/nodes. Signed-off-by: Miquel Sabaté Solà <mssola@mssola.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
committed by
David Sterba
parent
98077f7f21
commit
f08d7147da
@@ -738,8 +738,8 @@ static int btrfs_insert_delayed_item(struct btrfs_trans_handle *trans,
|
||||
u32 *ins_sizes;
|
||||
int i = 0;
|
||||
|
||||
ins_data = kmalloc(batch.nr * sizeof(u32) +
|
||||
batch.nr * sizeof(struct btrfs_key), GFP_NOFS);
|
||||
ins_data = kmalloc_array(batch.nr,
|
||||
sizeof(u32) + sizeof(struct btrfs_key), GFP_NOFS);
|
||||
if (!ins_data) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
|
||||
@@ -4054,8 +4054,7 @@ static int flush_dir_items_batch(struct btrfs_trans_handle *trans,
|
||||
struct btrfs_key *ins_keys;
|
||||
u32 *ins_sizes;
|
||||
|
||||
ins_data = kmalloc(count * sizeof(u32) +
|
||||
count * sizeof(struct btrfs_key), GFP_NOFS);
|
||||
ins_data = kmalloc_array(count, sizeof(u32) + sizeof(struct btrfs_key), GFP_NOFS);
|
||||
if (!ins_data)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -4818,8 +4817,7 @@ static noinline int copy_items(struct btrfs_trans_handle *trans,
|
||||
|
||||
src = src_path->nodes[0];
|
||||
|
||||
ins_data = kmalloc(nr * sizeof(struct btrfs_key) +
|
||||
nr * sizeof(u32), GFP_NOFS);
|
||||
ins_data = kmalloc_array(nr, sizeof(struct btrfs_key) + sizeof(u32), GFP_NOFS);
|
||||
if (!ins_data)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -6524,8 +6522,7 @@ static int log_delayed_insertion_items(struct btrfs_trans_handle *trans,
|
||||
if (!first)
|
||||
return 0;
|
||||
|
||||
ins_data = kmalloc(max_batch_size * sizeof(u32) +
|
||||
max_batch_size * sizeof(struct btrfs_key), GFP_NOFS);
|
||||
ins_data = kmalloc_array(max_batch_size, sizeof(u32) + sizeof(struct btrfs_key), GFP_NOFS);
|
||||
if (!ins_data)
|
||||
return -ENOMEM;
|
||||
ins_sizes = (u32 *)ins_data;
|
||||
|
||||
Reference in New Issue
Block a user