Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

kernel/gcov/gcc_3_4.c: 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 foo {
int stuff;
void *entry[];
};

instance = kzalloc(sizeof(struct foo) + sizeof(void *) * count, 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, entry, count), GFP_KERNEL);

This code was detected with the help of Coccinelle.

Link: http://lkml.kernel.org/r/20190109172445.GA15908@embeddedor
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Gustavo A. R. Silva and committed by
Linus Torvalds
9abdb50c 32a5ad9c

+2 -4
+2 -4
kernel/gcov/gcc_3_4.c
··· 245 245 246 246 /* Duplicate gcov_info. */ 247 247 active = num_counter_active(info); 248 - dup = kzalloc(sizeof(struct gcov_info) + 249 - sizeof(struct gcov_ctr_info) * active, GFP_KERNEL); 248 + dup = kzalloc(struct_size(dup, counts, active), GFP_KERNEL); 250 249 if (!dup) 251 250 return NULL; 252 251 dup->version = info->version; ··· 363 364 { 364 365 struct gcov_iterator *iter; 365 366 366 - iter = kzalloc(sizeof(struct gcov_iterator) + 367 - num_counter_active(info) * sizeof(struct type_info), 367 + iter = kzalloc(struct_size(iter, type_info, num_counter_active(info)), 368 368 GFP_KERNEL); 369 369 if (iter) 370 370 iter->info = info;