mm: use vmalloc_array and vcalloc for array allocations
authorPaolo Bonzini <pbonzini@redhat.com>
Tue, 8 Mar 2022 10:02:21 +0000 (05:02 -0500)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 8 Mar 2022 14:30:46 +0000 (09:30 -0500)
Instead of using array_size or just a multiply, use a function that
takes care of both the multiplication and the overflow checks.

Acked-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
mm/percpu-stats.c
mm/swap_cgroup.c

index c6bd092..dd3590d 100644 (file)
@@ -144,7 +144,7 @@ alloc_buffer:
        spin_unlock_irq(&pcpu_lock);
 
        /* there can be at most this many free and allocated fragments */
-       buffer = vmalloc(array_size(sizeof(int), (2 * max_nr_alloc + 1)));
+       buffer = vmalloc_array(2 * max_nr_alloc + 1, sizeof(int));
        if (!buffer)
                return -ENOMEM;
 
index 7f34343..5a94429 100644 (file)
@@ -167,14 +167,12 @@ unsigned short lookup_swap_cgroup_id(swp_entry_t ent)
 int swap_cgroup_swapon(int type, unsigned long max_pages)
 {
        void *array;
-       unsigned long array_size;
        unsigned long length;
        struct swap_cgroup_ctrl *ctrl;
 
        length = DIV_ROUND_UP(max_pages, SC_PER_PAGE);
-       array_size = length * sizeof(void *);
 
-       array = vzalloc(array_size);
+       array = vcalloc(length, sizeof(void *));
        if (!array)
                goto nomem;