static int kvmppc_core_create_memslot_hv(struct kvm_memory_slot *slot,
                                         unsigned long npages)
 {
-       slot->arch.rmap = vzalloc(npages * sizeof(*slot->arch.rmap));
+       slot->arch.rmap = vzalloc(array_size(npages, sizeof(*slot->arch.rmap)));
        if (!slot->arch.rmap)
                return -ENOMEM;
 
 
                goto unlock_exit;
        }
 
-       mem->hpas = vzalloc(entries * sizeof(mem->hpas[0]));
+       mem->hpas = vzalloc(array_size(entries, sizeof(mem->hpas[0])));
        if (!mem->hpas) {
                kfree(mem);
                ret = -ENOMEM;
 
                return -EINVAL;
 
        r = -ENOMEM;
-       cpuid_entries = vzalloc(sizeof(struct kvm_cpuid_entry2) * cpuid->nent);
+       cpuid_entries = vzalloc(array_size(sizeof(struct kvm_cpuid_entry2),
+                                          cpuid->nent));
        if (!cpuid_entries)
                goto out;
 
 
                return NULL;
 
        nr = disk_max_parts(hd);
-       state->parts = vzalloc(nr * sizeof(state->parts[0]));
+       state->parts = vzalloc(array_size(nr, sizeof(state->parts[0])));
        if (!state->parts) {
                kfree(state);
                return NULL;
 
        size_t num_pages;
 
        num_pages = disksize >> PAGE_SHIFT;
-       zram->table = vzalloc(num_pages * sizeof(*zram->table));
+       zram->table = vzalloc(array_size(num_pages, sizeof(*zram->table)));
        if (!zram->table)
                return false;
 
 
                max_raw_minors = MAX_RAW_MINORS;
        }
 
-       raw_devices = vzalloc(sizeof(struct raw_device_data) * max_raw_minors);
+       raw_devices = vzalloc(array_size(max_raw_minors,
+                                        sizeof(struct raw_device_data)));
        if (!raw_devices) {
                printk(KERN_ERR "Not enough memory for raw device structures\n");
                ret = -ENOMEM;
 
 
        pr_info("Intel P-state driver initializing\n");
 
-       all_cpu_data = vzalloc(sizeof(void *) * num_possible_cpus());
+       all_cpu_data = vzalloc(array_size(sizeof(void *), num_possible_cpus()));
        if (!all_cpu_data)
                return -ENOMEM;
 
 
        if (dma_mapping_error(dev, ch->desc_ring_micpa))
                goto map_error;
 
-       ch->tx_array = vzalloc(MIC_DMA_DESC_RX_SIZE * sizeof(*ch->tx_array));
+       ch->tx_array = vzalloc(array_size(MIC_DMA_DESC_RX_SIZE,
+                                         sizeof(*ch->tx_array)));
        if (!ch->tx_array)
                goto tx_error;
        return 0;
 
 
 #ifdef CONFIG_DRM_AMDGPU_GART_DEBUGFS
        /* Allocate pages table */
-       adev->gart.pages = vzalloc(sizeof(void *) * adev->gart.num_cpu_pages);
+       adev->gart.pages = vzalloc(array_size(sizeof(void *),
+                                             adev->gart.num_cpu_pages));
        if (adev->gart.pages == NULL)
                return -ENOMEM;
 #endif
 
        if (size <= PAGE_SIZE / sizeof(*ht->table))
                ht->table = kcalloc(size, sizeof(*ht->table), GFP_KERNEL);
        else
-               ht->table = vzalloc(size*sizeof(*ht->table));
+               ht->table = vzalloc(array_size(size, sizeof(*ht->table)));
        if (!ht->table) {
                DRM_ERROR("Out of memory for hash table\n");
                return -ENOMEM;
 
        mm->type = INTEL_GVT_MM_GGTT;
 
        nr_entries = gvt_ggtt_gm_sz(vgpu->gvt) >> I915_GTT_PAGE_SHIFT;
-       mm->ggtt_mm.virtual_ggtt = vzalloc(nr_entries *
-                                       vgpu->gvt->device_info.gtt_entry_size);
+       mm->ggtt_mm.virtual_ggtt =
+               vzalloc(array_size(nr_entries,
+                                  vgpu->gvt->device_info.gtt_entry_size));
        if (!mm->ggtt_mm.virtual_ggtt) {
                vgpu_free_mm(mm);
                return ERR_PTR(-ENOMEM);
 
 {
        const struct intel_gvt_device_info *info = &vgpu->gvt->device_info;
 
-       vgpu->mmio.vreg = vzalloc(info->mmio_size * 2);
+       vgpu->mmio.vreg = vzalloc(array_size(info->mmio_size, 2));
        if (!vgpu->mmio.vreg)
                return -ENOMEM;
 
 
        DRM_INFO("GART: num cpu pages %u, num gpu pages %u\n",
                 rdev->gart.num_cpu_pages, rdev->gart.num_gpu_pages);
        /* Allocate pages table */
-       rdev->gart.pages = vzalloc(sizeof(void *) * rdev->gart.num_cpu_pages);
+       rdev->gart.pages = vzalloc(array_size(sizeof(void *),
+                                  rdev->gart.num_cpu_pages));
        if (rdev->gart.pages == NULL) {
                radeon_gart_fini(rdev);
                return -ENOMEM;
 
        if (!order)
                goto err;
 
-       nodes = vzalloc(sizeof(*nodes) * count);
+       nodes = vzalloc(array_size(count, sizeof(*nodes)));
        if (!nodes)
                goto err_order;
 
         */
 
        ret = -ENOMEM;
-       nodes = vzalloc(count * sizeof(*nodes));
+       nodes = vzalloc(array_size(count, sizeof(*nodes)));
        if (!nodes)
                goto err;
 
         * meets our requirements.
         */
 
-       nodes = vzalloc(max_count * sizeof(*nodes));
+       nodes = vzalloc(array_size(max_count, sizeof(*nodes)));
        if (!nodes)
                goto err;
 
         */
 
        ret = -ENOMEM;
-       nodes = vzalloc(size * sizeof(*nodes));
+       nodes = vzalloc(array_size(size, sizeof(*nodes)));
        if (!nodes)
                goto err;
 
         */
 
        ret = -ENOMEM;
-       nodes = vzalloc(size * sizeof(*nodes));
+       nodes = vzalloc(array_size(size, sizeof(*nodes)));
        if (!nodes)
                goto err;
 
         */
 
        ret = -ENOMEM;
-       nodes = vzalloc(count * sizeof(*nodes));
+       nodes = vzalloc(array_size(count, sizeof(*nodes)));
        if (!nodes)
                goto err;
 
         */
 
        ret = -ENOMEM;
-       nodes = vzalloc(count * sizeof(*nodes));
+       nodes = vzalloc(array_size(count, sizeof(*nodes)));
        if (!nodes)
                goto err;
 
         */
 
        ret = -ENOMEM;
-       nodes = vzalloc(total_size * sizeof(*nodes));
+       nodes = vzalloc(array_size(total_size, sizeof(*nodes)));
        if (!nodes)
                goto err;
 
         */
 
        ret = -ENOMEM;
-       nodes = vzalloc(total_size * sizeof(*nodes));
+       nodes = vzalloc(array_size(total_size, sizeof(*nodes)));
        if (!nodes)
                goto err;
 
 
        vsg->num_pages = VIA_PFN(xfer->mem_addr + (xfer->num_lines * xfer->mem_stride - 1)) -
                first_pfn + 1;
 
-       vsg->pages = vzalloc(sizeof(struct page *) * vsg->num_pages);
+       vsg->pages = vzalloc(array_size(sizeof(struct page *), vsg->num_pages));
        if (NULL == vsg->pages)
                return -ENOMEM;
        ret = get_user_pages_fast((unsigned long)xfer->mem_addr,
 
        mutex_init(&odp_data->umem_mutex);
        init_completion(&odp_data->notifier_completion);
 
-       odp_data->page_list = vzalloc(pages * sizeof(*odp_data->page_list));
+       odp_data->page_list =
+               vzalloc(array_size(pages, sizeof(*odp_data->page_list)));
        if (!odp_data->page_list) {
                ret = -ENOMEM;
                goto out_odp_data;
        }
 
-       odp_data->dma_list = vzalloc(pages * sizeof(*odp_data->dma_list));
+       odp_data->dma_list =
+               vzalloc(array_size(pages, sizeof(*odp_data->dma_list)));
        if (!odp_data->dma_list) {
                ret = -ENOMEM;
                goto out_page_list;
        init_completion(&umem->odp_data->notifier_completion);
 
        if (ib_umem_num_pages(umem)) {
-               umem->odp_data->page_list = vzalloc(ib_umem_num_pages(umem) *
-                                           sizeof(*umem->odp_data->page_list));
+               umem->odp_data->page_list =
+                       vzalloc(array_size(sizeof(*umem->odp_data->page_list),
+                                          ib_umem_num_pages(umem)));
                if (!umem->odp_data->page_list) {
                        ret_val = -ENOMEM;
                        goto out_odp_data;
                }
 
-               umem->odp_data->dma_list = vzalloc(ib_umem_num_pages(umem) *
-                                         sizeof(*umem->odp_data->dma_list));
+               umem->odp_data->dma_list =
+                       vzalloc(array_size(sizeof(*umem->odp_data->dma_list),
+                                          ib_umem_num_pages(umem)));
                if (!umem->odp_data->dma_list) {
                        ret_val = -ENOMEM;
                        goto out_page_list;
 
                buddy->bits[i] = kcalloc(s, sizeof(long), GFP_KERNEL |
                                         __GFP_NOWARN);
                if (!buddy->bits[i]) {
-                       buddy->bits[i] = vzalloc(s * sizeof(long));
+                       buddy->bits[i] = vzalloc(array_size(s, sizeof(long)));
                        if (!buddy->bits[i])
                                goto err_out_free;
                }
 
        struct page **pages;
        dma_addr_t *addrs;
 
-       pages = vzalloc(dd->cfgctxts * dd->rcvtidcnt * sizeof(struct page *));
+       pages = vzalloc(array_size(sizeof(struct page *),
+                                  dd->cfgctxts * dd->rcvtidcnt));
        if (!pages)
                goto bail;
 
-       addrs = vzalloc(dd->cfgctxts * dd->rcvtidcnt * sizeof(dma_addr_t));
+       addrs = vzalloc(array_size(sizeof(dma_addr_t),
+                                  dd->cfgctxts * dd->rcvtidcnt));
        if (!addrs)
                goto bail_free;
 
 
        int ret;
        int i;
 
-       rx->rx_ring = vzalloc(ipoib_recvq_size * sizeof *rx->rx_ring);
+       rx->rx_ring = vzalloc(array_size(ipoib_recvq_size,
+                                        sizeof(*rx->rx_ring)));
        if (!rx->rx_ring)
                return -ENOMEM;
 
        int ret;
 
        noio_flag = memalloc_noio_save();
-       p->tx_ring = vzalloc(ipoib_sendq_size * sizeof(*p->tx_ring));
+       p->tx_ring = vzalloc(array_size(ipoib_sendq_size, sizeof(*p->tx_ring)));
        if (!p->tx_ring) {
                memalloc_noio_restore(noio_flag);
                ret = -ENOMEM;
                return;
        }
 
-       priv->cm.srq_ring = vzalloc(ipoib_recvq_size * sizeof *priv->cm.srq_ring);
+       priv->cm.srq_ring = vzalloc(array_size(ipoib_recvq_size,
+                                              sizeof(*priv->cm.srq_ring)));
        if (!priv->cm.srq_ring) {
                ib_destroy_srq(priv->cm.srq);
                priv->cm.srq = NULL;
 
        if (!priv->rx_ring)
                goto out;
 
-       priv->tx_ring = vzalloc(ipoib_sendq_size * sizeof *priv->tx_ring);
+       priv->tx_ring = vzalloc(array_size(ipoib_sendq_size,
+                                          sizeof(*priv->tx_ring)));
        if (!priv->tx_ring) {
                pr_warn("%s: failed to allocate TX ring (%d entries)\n",
                        priv->ca->name, ipoib_sendq_size);
 
 
        nr_entries = pblk_rb_calculate_size(buffer_size);
 
-       entries = vzalloc(nr_entries * sizeof(struct pblk_rb_entry));
+       entries = vzalloc(array_size(nr_entries, sizeof(struct pblk_rb_entry)));
        if (!entries)
                return -ENOMEM;
 
 
        if (!pad_rq)
                return -ENOMEM;
 
-       data = vzalloc(pblk->max_write_pgs * geo->csecs);
+       data = vzalloc(array_size(pblk->max_write_pgs, geo->csecs));
        if (!data) {
                ret = -ENOMEM;
                goto free_rq;
 
            !init_fifo(&ca->free[RESERVE_NONE], free, GFP_KERNEL) ||
            !init_fifo(&ca->free_inc,   free << 2, GFP_KERNEL) ||
            !init_heap(&ca->heap,       free << 3, GFP_KERNEL) ||
-           !(ca->buckets       = vzalloc(sizeof(struct bucket) *
-                                         ca->sb.nbuckets)) ||
+           !(ca->buckets       = vzalloc(array_size(sizeof(struct bucket),
+                                                    ca->sb.nbuckets))) ||
            !(ca->prio_buckets  = kzalloc(array3_size(sizeof(uint64_t),
                                                      prio_buckets(ca), 2),
                                          GFP_KERNEL)) ||
 
                return 0;
        }
 
-       es->begin = vzalloc(sizeof(struct entry) * nr_entries);
+       es->begin = vzalloc(array_size(nr_entries, sizeof(struct entry)));
        if (!es->begin)
                return -ENOMEM;
 
 
                for (plane = 0; plane < TPG_MAX_PLANES; plane++) {
                        unsigned pixelsz = plane ? 2 : 4;
 
-                       tpg->lines[pat][plane] = vzalloc(max_w * 2 * pixelsz);
+                       tpg->lines[pat][plane] =
+                               vzalloc(array3_size(max_w, 2, pixelsz));
                        if (!tpg->lines[pat][plane])
                                return -ENOMEM;
                        if (plane == 0)
                                continue;
-                       tpg->downsampled_lines[pat][plane] = vzalloc(max_w * 2 * pixelsz);
+                       tpg->downsampled_lines[pat][plane] =
+                               vzalloc(array3_size(max_w, 2, pixelsz));
                        if (!tpg->downsampled_lines[pat][plane])
                                return -ENOMEM;
                }
        for (plane = 0; plane < TPG_MAX_PLANES; plane++) {
                unsigned pixelsz = plane ? 2 : 4;
 
-               tpg->contrast_line[plane] = vzalloc(max_w * pixelsz);
+               tpg->contrast_line[plane] =
+                       vzalloc(array_size(pixelsz, max_w));
                if (!tpg->contrast_line[plane])
                        return -ENOMEM;
-               tpg->black_line[plane] = vzalloc(max_w * pixelsz);
+               tpg->black_line[plane] =
+                       vzalloc(array_size(pixelsz, max_w));
                if (!tpg->black_line[plane])
                        return -ENOMEM;
-               tpg->random_line[plane] = vzalloc(max_w * 2 * pixelsz);
+               tpg->random_line[plane] =
+                       vzalloc(array3_size(max_w, 2, pixelsz));
                if (!tpg->random_line[plane])
                        return -ENOMEM;
        }
 
        memset(buf->vaddr, 0, nr_pages << PAGE_SHIFT);
        buf->nr_pages = nr_pages;
 
-       buf->sglist = vzalloc(buf->nr_pages * sizeof(*buf->sglist));
+       buf->sglist = vzalloc(array_size(sizeof(*buf->sglist), buf->nr_pages));
        if (NULL == buf->sglist)
                goto vzalloc_err;
 
 
        memset(buf->vaddr, 0, nr_pages << PAGE_SHIFT);
        buf->nr_pages = nr_pages;
 
-       buf->sglist = vzalloc(buf->nr_pages * sizeof(*buf->sglist));
+       buf->sglist = vzalloc(array_size(sizeof(*buf->sglist), buf->nr_pages));
        if (NULL == buf->sglist)
                goto vzalloc_err;
 
 
        memset(buf->vaddr, 0, nr_pages << PAGE_SHIFT);
        buf->nr_pages = nr_pages;
 
-       buf->sglist = vzalloc(buf->nr_pages * sizeof(*buf->sglist));
+       buf->sglist = vzalloc(array_size(sizeof(*buf->sglist), buf->nr_pages));
        if (!buf->sglist)
                goto vzalloc_err;
 
 
        memset(dma->vaddr, 0, nr_pages << PAGE_SHIFT);
        dma->nr_pages = nr_pages;
 
-       dma->sglist = vzalloc(dma->nr_pages * sizeof(*dma->sglist));
+       dma->sglist = vzalloc(array_size(sizeof(*dma->sglist), dma->nr_pages));
        if (NULL == dma->sglist)
                goto vzalloc_err;
 
 
        tpg_init(&dev->tpg, 640, 360);
        if (tpg_alloc(&dev->tpg, MAX_ZOOM * MAX_WIDTH))
                goto free_dev;
-       dev->scaled_line = vzalloc(MAX_ZOOM * MAX_WIDTH);
+       dev->scaled_line = vzalloc(array_size(MAX_WIDTH, MAX_ZOOM));
        if (!dev->scaled_line)
                goto free_dev;
-       dev->blended_line = vzalloc(MAX_ZOOM * MAX_WIDTH);
+       dev->blended_line = vzalloc(array_size(MAX_WIDTH, MAX_ZOOM));
        if (!dev->blended_line)
                goto free_dev;
 
 
        struct page *pg;
        int i;
 
-       sglist = vzalloc(nr_pages * sizeof(*sglist));
+       sglist = vzalloc(array_size(nr_pages, sizeof(*sglist)));
        if (NULL == sglist)
                return NULL;
        sg_init_table(sglist, nr_pages);
 
                        err = -EINVAL;
                        goto err_close;
                }
-               ns->pages_written = vzalloc(BITS_TO_LONGS(ns->geom.pgnum) *
-                                           sizeof(unsigned long));
+               ns->pages_written =
+                       vzalloc(array_size(sizeof(unsigned long),
+                                          BITS_TO_LONGS(ns->geom.pgnum)));
                if (!ns->pages_written) {
                        NS_ERR("alloc_device: unable to allocate pages written array\n");
                        err = -ENOMEM;
 
                int j;
 
                rxr->rx_buf_ring =
-                       vzalloc(SW_RXBD_RING_SIZE * bp->rx_max_ring);
+                       vzalloc(array_size(SW_RXBD_RING_SIZE, bp->rx_max_ring));
                if (!rxr->rx_buf_ring)
                        return -ENOMEM;
 
                }
 
                if (bp->rx_pg_ring_size) {
-                       rxr->rx_pg_ring = vzalloc(SW_RXPG_RING_SIZE *
-                                                 bp->rx_max_pg_ring);
+                       rxr->rx_pg_ring =
+                               vzalloc(array_size(SW_RXPG_RING_SIZE,
+                                                  bp->rx_max_pg_ring));
                        if (!rxr->rx_pg_ring)
                                return -ENOMEM;
 
 
                                                numa_node);
        if (!droq->recv_buf_list)
                droq->recv_buf_list = (struct octeon_recv_buffer *)
-                                     vzalloc(droq->max_count *
-                                               OCT_DROQ_RECVBUF_SIZE);
+                     vzalloc(array_size(droq->max_count,
+                                        OCT_DROQ_RECVBUF_SIZE));
        if (!droq->recv_buf_list) {
                dev_err(&oct->pci_dev->dev, "Output queue recv buf list alloc failed\n");
                goto init_droq_fail;
 
                return ret;
 
        /* malloc mem for tcam mac key(vlan+mac) */
-       priv->soft_mac_tbl = vzalloc(sizeof(*priv->soft_mac_tbl)
-                 * DSAF_TCAM_SUM);
+       priv->soft_mac_tbl = vzalloc(array_size(DSAF_TCAM_SUM,
+                                               sizeof(*priv->soft_mac_tbl)));
        if (!priv->soft_mac_tbl) {
                ret = -ENOMEM;
                goto remove_hw;
 
 
        spin_lock_init(&cmdq->cmdq_lock);
 
-       cmdq->done = vzalloc(wq->q_depth * sizeof(*cmdq->done));
+       cmdq->done = vzalloc(array_size(sizeof(*cmdq->done), wq->q_depth));
        if (!cmdq->done)
                return -ENOMEM;
 
-       cmdq->errcode = vzalloc(wq->q_depth * sizeof(*cmdq->errcode));
+       cmdq->errcode = vzalloc(array_size(sizeof(*cmdq->errcode),
+                                          wq->q_depth));
        if (!cmdq->errcode) {
                err = -ENOMEM;
                goto err_errcode;
 
                 * allocate new memblock and its private part at once.
                 * This helps to minimize memory usage a lot. */
                mempool->memblocks_priv_arr[i] =
-                               vzalloc(mempool->items_priv_size * n_items);
+                       vzalloc(array_size(mempool->items_priv_size, n_items));
                if (mempool->memblocks_priv_arr[i] == NULL) {
                        status = VXGE_HW_ERR_OUT_OF_MEMORY;
                        goto exit;
 
        /* allocate array of memblocks */
        mempool->memblocks_arr =
-               vzalloc(sizeof(void *) * mempool->memblocks_max);
+               vzalloc(array_size(sizeof(void *), mempool->memblocks_max));
        if (mempool->memblocks_arr == NULL) {
                __vxge_hw_mempool_destroy(mempool);
                status = VXGE_HW_ERR_OUT_OF_MEMORY;
 
        /* allocate array of private parts of items per memblocks */
        mempool->memblocks_priv_arr =
-               vzalloc(sizeof(void *) * mempool->memblocks_max);
+               vzalloc(array_size(sizeof(void *), mempool->memblocks_max));
        if (mempool->memblocks_priv_arr == NULL) {
                __vxge_hw_mempool_destroy(mempool);
                status = VXGE_HW_ERR_OUT_OF_MEMORY;
 
        /* allocate array of memblocks DMA objects */
        mempool->memblocks_dma_arr =
-               vzalloc(sizeof(struct vxge_hw_mempool_dma) *
-                       mempool->memblocks_max);
+               vzalloc(array_size(sizeof(struct vxge_hw_mempool_dma),
+                                  mempool->memblocks_max));
        if (mempool->memblocks_dma_arr == NULL) {
                __vxge_hw_mempool_destroy(mempool);
                status = VXGE_HW_ERR_OUT_OF_MEMORY;
        }
 
        /* allocate hash array of items */
-       mempool->items_arr = vzalloc(sizeof(void *) * mempool->items_max);
+       mempool->items_arr = vzalloc(array_size(sizeof(void *),
+                                               mempool->items_max));
        if (mempool->items_arr == NULL) {
                __vxge_hw_mempool_destroy(mempool);
                status = VXGE_HW_ERR_OUT_OF_MEMORY;
 
        if (!cdev)
                return -ENODEV;
 
-       rss = vzalloc(sizeof(*rss) * cdev->num_hwfns);
+       rss = vzalloc(array_size(sizeof(*rss), cdev->num_hwfns));
        if (!rss)
                return -ENOMEM;
 
 
        for (i = 0; i <= QEDE_RFS_FLW_MASK; i++)
                INIT_HLIST_HEAD(QEDE_ARFS_BUCKET_HEAD(edev, i));
 
-       edev->arfs->arfs_fltr_bmap = vzalloc(BITS_TO_LONGS(QEDE_RFS_MAX_FLTR) *
-                                            sizeof(long));
+       edev->arfs->arfs_fltr_bmap =
+               vzalloc(array_size(sizeof(long),
+                                  BITS_TO_LONGS(QEDE_RFS_MAX_FLTR)));
        if (!edev->arfs->arfs_fltr_bmap) {
                vfree(edev->arfs);
                edev->arfs = NULL;
 
        }
 
        /* setup interrupt mapping table for fw */
-       ahw->intr_tbl = vzalloc(num_msix *
-                               sizeof(struct qlcnic_intrpt_config));
+       ahw->intr_tbl =
+               vzalloc(array_size(num_msix,
+                                  sizeof(struct qlcnic_intrpt_config)));
        if (!ahw->intr_tbl)
                return -ENOMEM;
 
 
        if (qlcnic_check_multi_tx(adapter) &&
            !ahw->diag_test &&
            (adapter->flags & QLCNIC_MSIX_ENABLED)) {
-               ahw->intr_tbl = vzalloc(ahw->num_msix *
-                                       sizeof(struct qlcnic_intrpt_config));
+               ahw->intr_tbl =
+                       vzalloc(array_size(sizeof(struct qlcnic_intrpt_config),
+                                          ahw->num_msix));
                if (!ahw->intr_tbl)
                        return -ENOMEM;
 
 
                net_dev->hw_features &= ~NETIF_F_HW_VLAN_CTAG_FILTER;
        }
 
-       table->entry = vzalloc(HUNT_FILTER_TBL_ROWS * sizeof(*table->entry));
+       table->entry = vzalloc(array_size(HUNT_FILTER_TBL_ROWS,
+                                         sizeof(*table->entry)));
        if (!table->entry) {
                rc = -ENOMEM;
                goto fail;
 
                                             GFP_KERNEL);
                if (!table->used_bitmap)
                        goto fail;
-               table->spec = vzalloc(table->size * sizeof(*table->spec));
+               table->spec = vzalloc(array_size(sizeof(*table->spec),
+                                                table->size));
                if (!table->spec)
                        goto fail;
        }
 
                                             GFP_KERNEL);
                if (!table->used_bitmap)
                        goto fail;
-               table->spec = vzalloc(table->size * sizeof(*table->spec));
+               table->spec = vzalloc(array_size(sizeof(*table->spec),
+                                                table->size));
                if (!table->spec)
                        goto fail;
        }
 
        int err = 0;
        pr_info("PPTP driver version " PPTP_DRIVER_VERSION "\n");
 
-       callid_sock = vzalloc((MAX_CALLID + 1) * sizeof(void *));
+       callid_sock = vzalloc(array_size(sizeof(void *), (MAX_CALLID + 1)));
        if (!callid_sock)
                return -ENOMEM;
 
 
        }
 
        /* Use the number of queues requested by the frontend */
-       be->vif->queues = vzalloc(requested_num_queues *
-                                 sizeof(struct xenvif_queue));
+       be->vif->queues = vzalloc(array_size(requested_num_queues,
+                                            sizeof(struct xenvif_queue)));
        if (!be->vif->queues) {
                xenbus_dev_fatal(dev, -ENOMEM,
                                 "allocating queues");
 
                goto out_result;
 
        /* Allocate memory */
-       data = vzalloc((size_t) dsize * PAGE_SIZE);
+       data = vzalloc(array_size((size_t)dsize, PAGE_SIZE));
        if (!data) {
                rc = -ENOMEM;
                goto out;
 
                (PLD_SPAN_INFO)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
                                                fusion->log_to_span_pages);
        if (!fusion->log_to_span) {
-               fusion->log_to_span = vzalloc(MAX_LOGICAL_DRIVES_EXT *
-                                             sizeof(LD_SPAN_INFO));
+               fusion->log_to_span =
+                       vzalloc(array_size(MAX_LOGICAL_DRIVES_EXT,
+                                          sizeof(LD_SPAN_INFO)));
                if (!fusion->log_to_span) {
                        dev_err(&instance->pdev->dev, "Failed from %s %d\n",
                                __func__, __LINE__);
                (struct LD_LOAD_BALANCE_INFO *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
                fusion->load_balance_info_pages);
        if (!fusion->load_balance_info) {
-               fusion->load_balance_info = vzalloc(MAX_LOGICAL_DRIVES_EXT *
-                       sizeof(struct LD_LOAD_BALANCE_INFO));
+               fusion->load_balance_info =
+                       vzalloc(array_size(MAX_LOGICAL_DRIVES_EXT,
+                                          sizeof(struct LD_LOAD_BALANCE_INFO)));
                if (!fusion->load_balance_info)
                        dev_err(&instance->pdev->dev, "Failed to allocate load_balance_info, "
                                "continuing without Load Balance support\n");
 
                return rc;
        }
 
-       lport->lport_loopid_map = vzalloc(sizeof(struct tcm_qla2xxx_fc_loopid) * 65536);
+       lport->lport_loopid_map =
+               vzalloc(array_size(65536,
+                                  sizeof(struct tcm_qla2xxx_fc_loopid)));
        if (!lport->lport_loopid_map) {
                pr_err("Unable to allocate lport->lport_loopid_map of %zu bytes\n",
                    sizeof(struct tcm_qla2xxx_fc_loopid) * 65536);
 
 {
        num_fqids = _num_fqids;
 
-       fq_table = vzalloc(num_fqids * 2 * sizeof(struct qman_fq *));
+       fq_table = vzalloc(array3_size(sizeof(struct qman_fq *),
+                                      num_fqids, 2));
        if (!fq_table)
                return -ENOMEM;
 
 
 
        memset(&pmlmepriv->assoc_ssid, 0, sizeof(struct ndis_802_11_ssid));
 
-       pbuf = vzalloc(MAX_BSS_CNT * (sizeof(struct wlan_network)));
+       pbuf = vzalloc(array_size(MAX_BSS_CNT, sizeof(struct wlan_network)));
 
        if (!pbuf) {
                res = _FAIL;
 
 
        memset(&pmlmepriv->assoc_ssid, 0, sizeof(struct ndis_802_11_ssid));
 
-       pbuf = vzalloc(MAX_BSS_CNT * (sizeof(struct wlan_network)));
+       pbuf = vzalloc(array_size(MAX_BSS_CNT, sizeof(struct wlan_network)));
 
        if (pbuf == NULL) {
                res = _FAIL;
 
 
        dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len);
 
-       data = vzalloc(dw_len * 4);
+       data = vzalloc(array_size(dw_len, 4));
        if (!data) {
                rtsx_trace(chip);
                return STATUS_NOMEM;
        }
 
-       mask = vzalloc(dw_len * 4);
+       mask = vzalloc(array_size(dw_len, 4));
        if (!mask) {
                vfree(data);
                rtsx_trace(chip);
 
        se_sess->sess_cmd_map = kcalloc(tag_size, tag_num,
                                        GFP_KERNEL | __GFP_NOWARN | __GFP_RETRY_MAYFAIL);
        if (!se_sess->sess_cmd_map) {
-               se_sess->sess_cmd_map = vzalloc(tag_num * tag_size);
+               se_sess->sess_cmd_map = vzalloc(array_size(tag_size, tag_num));
                if (!se_sess->sess_cmd_map) {
                        pr_err("Unable to allocate se_sess->sess_cmd_map\n");
                        return -ENOMEM;
 
 
        drc_hashtbl = kcalloc(hashsize, sizeof(*drc_hashtbl), GFP_KERNEL);
        if (!drc_hashtbl) {
-               drc_hashtbl = vzalloc(hashsize * sizeof(*drc_hashtbl));
+               drc_hashtbl = vzalloc(array_size(hashsize,
+                                                sizeof(*drc_hashtbl)));
                if (!drc_hashtbl)
                        goto out_nomem;
        }
 
        if (num_cnodes <= 0) {
                return NULL;
        }
-       head = vzalloc(num_cnodes * sizeof(struct reiserfs_journal_cnode));
+       head = vzalloc(array_size(num_cnodes,
+                                 sizeof(struct reiserfs_journal_cnode)));
        if (!head) {
                return NULL;
        }
 
                 * array of bitmap block pointers
                 */
                bitmap =
-                   vzalloc(sizeof(struct reiserfs_bitmap_info) * bmap_nr_new);
+                   vzalloc(array_size(bmap_nr_new,
+                                      sizeof(struct reiserfs_bitmap_info)));
                if (!bitmap) {
                        /*
                         * Journal bitmaps are still supersized, but the
 
 
        if (cnt == 1)
                return 0;
-       new_data = vzalloc(sizeof(struct bpf_insn_aux_data) * prog_len);
+       new_data = vzalloc(array_size(prog_len,
+                                     sizeof(struct bpf_insn_aux_data)));
        if (!new_data)
                return -ENOMEM;
        memcpy(new_data, old_data, sizeof(struct bpf_insn_aux_data) * off);
                return -ENOMEM;
        log = &env->log;
 
-       env->insn_aux_data = vzalloc(sizeof(struct bpf_insn_aux_data) *
-                                    (*prog)->len);
+       env->insn_aux_data =
+               vzalloc(array_size(sizeof(struct bpf_insn_aux_data),
+                                  (*prog)->len));
        ret = -ENOMEM;
        if (!env->insn_aux_data)
                goto err_free_env;
 
         * The section headers in kexec_purgatory are read-only. In order to
         * have them modifiable make a temporary copy.
         */
-       sechdrs = vzalloc(pi->ehdr->e_shnum * sizeof(Elf_Shdr));
+       sechdrs = vzalloc(array_size(sizeof(Elf_Shdr), pi->ehdr->e_shnum));
        if (!sechdrs)
                return -ENOMEM;
        memcpy(sechdrs, (void *)pi->ehdr + pi->ehdr->e_shoff,
 
 
        mutex_lock(&test_fw_mutex);
 
-       test_fw_config->reqs = vzalloc(sizeof(struct test_batched_req) *
-                                      test_fw_config->num_requests * 2);
+       test_fw_config->reqs =
+               vzalloc(array3_size(sizeof(struct test_batched_req),
+                                   test_fw_config->num_requests, 2));
        if (!test_fw_config->reqs) {
                rc = -ENOMEM;
                goto out_unlock;
 
        mutex_lock(&test_fw_mutex);
 
-       test_fw_config->reqs = vzalloc(sizeof(struct test_batched_req) *
-                                      test_fw_config->num_requests * 2);
+       test_fw_config->reqs =
+               vzalloc(array3_size(sizeof(struct test_batched_req),
+                                   test_fw_config->num_requests, 2));
        if (!test_fw_config->reqs) {
                rc = -ENOMEM;
                goto out;
 
        struct test_config *config = &test_dev->config;
 
        free_test_dev_info(test_dev);
-       test_dev->info = vzalloc(config->num_threads *
-                                sizeof(struct kmod_test_device_info));
+       test_dev->info =
+               vzalloc(array_size(sizeof(struct kmod_test_device_info),
+                                  config->num_threads));
        if (!test_dev->info)
                return -ENOMEM;
 
 
        if (entries == 0)
                entries = 1;
 
-       rhl_test_objects = vzalloc(sizeof(*rhl_test_objects) * entries);
+       rhl_test_objects = vzalloc(array_size(entries,
+                                             sizeof(*rhl_test_objects)));
        if (!rhl_test_objects)
                return -ENOMEM;
 
        ret = -ENOMEM;
-       obj_in_table = vzalloc(BITS_TO_LONGS(entries) * sizeof(unsigned long));
+       obj_in_table = vzalloc(array_size(sizeof(unsigned long),
+                                         BITS_TO_LONGS(entries)));
        if (!obj_in_table)
                goto out_free;
 
        test_rht_params.max_size = max_size ? : roundup_pow_of_two(entries);
        test_rht_params.nelem_hint = size;
 
-       objs = vzalloc((test_rht_params.max_size + 1) * sizeof(struct test_obj));
+       objs = vzalloc(array_size(sizeof(struct test_obj),
+                                 test_rht_params.max_size + 1));
        if (!objs)
                return -ENOMEM;
 
        pr_info("Testing concurrent rhashtable access from %d threads\n",
                tcount);
        sema_init(&prestart_sem, 1 - tcount);
-       tdata = vzalloc(tcount * sizeof(struct thread_data));
+       tdata = vzalloc(array_size(tcount, sizeof(struct thread_data)));
        if (!tdata)
                return -ENOMEM;
-       objs  = vzalloc(tcount * entries * sizeof(struct test_obj));
+       objs  = vzalloc(array3_size(sizeof(struct test_obj), tcount, entries));
        if (!objs) {
                vfree(tdata);
                return -ENOMEM;
 
        WARN_ON_ONCE(!ret);
 
        gstrings.len = ret;
-       data = vzalloc(gstrings.len * ETH_GSTRING_LEN);
+       data = vzalloc(array_size(gstrings.len, ETH_GSTRING_LEN));
        if (gstrings.len && !data)
                return -ENOMEM;
 
                return -EFAULT;
 
        stats.n_stats = n_stats;
-       data = vzalloc(n_stats * sizeof(u64));
+       data = vzalloc(array_size(n_stats, sizeof(u64)));
        if (n_stats && !data)
                return -ENOMEM;
 
                return -EFAULT;
 
        stats.n_stats = n_stats;
-       data = vzalloc(n_stats * sizeof(u64));
+       data = vzalloc(array_size(n_stats, sizeof(u64)));
        if (n_stats && !data)
                return -ENOMEM;
 
 
                return buffer;
 
        /* __get_free_pages failed, fall back to vmalloc */
-       buffer = vzalloc((1 << order) * PAGE_SIZE);
+       buffer = vzalloc(array_size((1 << order), PAGE_SIZE));
        if (buffer)
                return buffer;