dm raid1: Use struct_size() in kzalloc()
Subsystems (2)
PATCH 1/1 dm raid1: Use struct_size() in kzalloc()
One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:
struct mirror_set {
...
struct mirror mirror[0];
};size = sizeof(struct mirror_set) + count * sizeof(struct mirror); instance = kzalloc(size, GFP_KERNEL)
Instead of leaving these open-coded and prone to type mistakes, we can now use the new struct_size() helper:
instance = kzalloc(struct_size(instance, mirror, count), GFP_KERNEL)
Notice that, in this case, variable len is not necessary, hence it is removed.
This code was detected with the help of Coccinelle.
--- drivers/md/dm-raid1.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
drivers/md/dm-raid1.c +1 -4
@@ -878,12 +878,9 @@ static struct mirror_set *alloc_context(unsigned int nr_mirrors,struct dm_target *ti, struct dm_dirty_log *dl) { - size_t len; struct mirror_set *ms = NULL; - len =sizeof (*ms) + (sizeof (ms->mirror[0 ]) * nr_mirrors); - - ms =kzalloc (len,GFP_KERNEL ); + ms =kzalloc (struct_size (ms, mirror, nr_mirrors),GFP_KERNEL );if (!ms) { ti->error ="Cannot allocate mirror context" ;return NULL ;
Signature · 1 line
2.22.0
drivers/md/dm-raid1.c static struct mirror_set *alloc_context(unsigned int nr_mirrors, · line 881
Quoted 7 lines
+++
b/drivers/md/dm-raid1.cdrivers/md/dm-raid1.c +0
-1@@ -878,12 +878,9 @@ static struct mirror_set *alloc_context(unsigned int nr_mirrors,struct dm_target *ti, struct dm_dirty_log *dl) { - size_t len; struct mirror_set *ms = NULL;
…
How do you think about to replace the initialisation “NULL” by the desired function call?
Regards,
Markus