x86/kexec/crash: Use struct_size() in vzalloc()
authorGustavo A. R. Silva <gustavo@embeddedor.com>
Wed, 3 Apr 2019 18:42:30 +0000 (13:42 -0500)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 5 Apr 2019 11:18:38 +0000 (13:18 +0200)
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;
    struct boo entry[];
};

instance = vzalloc(sizeof(struct foo) + count * sizeof(struct boo));

Instead of leaving these open-coded and prone to type mistakes, use the new
struct_size() helper:

   instance = vzalloc(struct_size(instance, entry, count));

This code was detected with the help of Coccinelle.

Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Link: https://lkml.kernel.org/r/20190403184230.GA5295@embeddedor
arch/x86/kernel/crash.c

index 17ffc86..a96ca85 100644 (file)
@@ -204,8 +204,7 @@ static struct crash_mem *fill_up_crash_elf_data(void)
         * another range split. So add extra two slots here.
         */
        nr_ranges += 2;
-       cmem = vzalloc(sizeof(struct crash_mem) +
-                       sizeof(struct crash_mem_range) * nr_ranges);
+       cmem = vzalloc(struct_size(cmem, ranges, nr_ranges));
        if (!cmem)
                return NULL;