Fix coverity issue for potentially overflowing of page size 91/15291/2
authorHaiyang Tan <haiyangtan@tencent.com>
Mon, 15 Oct 2018 13:17:55 +0000 (06:17 -0700)
committerDamjan Marion <dmarion@me.com>
Tue, 16 Oct 2018 11:37:49 +0000 (11:37 +0000)
Change-Id: I2779626d745badb63386efcf729da7a094a4f297
Signed-off-by: Haiyang Tan <haiyangtan@tencent.com>
src/plugins/dpdk/buffer.c
src/svm/ssvm.c
src/vlib/buffer.c
src/vlib/linux/physmem.c
src/vlib/linux/vfio.c
src/vppinfra/linux/mem.c

index edace2a..bb177fc 100644 (file)
@@ -465,7 +465,7 @@ dpdk_pool_create (vlib_main_t * vm, u8 * pool_name, u32 elt_size,
 
   for (i = 0; i < pr->n_pages; i++)
     {
-      size_t page_size = 1 << pr->log2_page_size;
+      size_t page_size = 1ull << pr->log2_page_size;
       ret = rte_mempool_populate_iova (mp, ((char *) pr->mem) + i * page_size,
                                       pr->page_table[i], page_size, 0, 0);
       if (ret < 0)
@@ -493,8 +493,8 @@ dpdk_pool_create (vlib_main_t * vm, u8 * pool_name, u32 elt_size,
       /* *INDENT-OFF* */
       vec_foreach_index (i, pr->page_table)
        {
-         dm.vaddr = pointer_to_uword (pr->mem) + (i << pr->log2_page_size);
-         dm.size = 1 << pr->log2_page_size;
+         dm.vaddr = pointer_to_uword (pr->mem) + ((u64)i << pr->log2_page_size);
+         dm.size = 1ull << pr->log2_page_size;
          dm.iova = pr->page_table[i];
          if ((rv = ioctl (dbm->vfio_container_fd, VFIO_IOMMU_MAP_DMA, &dm)))
            break;
index 03451e6..7fa9b25 100644 (file)
@@ -248,7 +248,7 @@ ssvm_master_init_memfd (ssvm_private_t * memfd)
   memfd->my_pid = getpid ();
   memfd->i_am_master = 1;
 
-  page_size = 1 << alloc.log2_page_size;
+  page_size = 1ull << alloc.log2_page_size;
   sh = memfd->sh;
   sh->master_pid = memfd->my_pid;
   sh->ssvm_size = memfd->ssvm_size;
index a704efb..785fa9b 100644 (file)
@@ -910,7 +910,7 @@ vlib_buffer_pool_create (vlib_main_t * vm, vlib_physmem_region_index_t pri,
 
   p->log2_page_size = pr->log2_page_size;
   p->buffer_size = buffer_size;
-  p->buffers_per_page = (1 << pr->log2_page_size) / p->buffer_size;
+  p->buffers_per_page = (1ull << pr->log2_page_size) / p->buffer_size;
   p->n_elts = p->buffers_per_page * pr->n_pages;
   p->n_used = 0;
   clib_spinlock_init (&p->lock);
index 4d16486..dbc4c54 100755 (executable)
@@ -179,7 +179,7 @@ unix_physmem_region_alloc (vlib_main_t * vm, char *name, u32 size,
   pr->log2_page_size = alloc.log2_page_size;
   pr->n_pages = alloc.n_pages;
   pr->size = (u64) pr->n_pages << (u64) pr->log2_page_size;
-  pr->page_mask = (1 << pr->log2_page_size) - 1;
+  pr->page_mask = (1ull << pr->log2_page_size) - 1;
   pr->numa_node = numa_node;
   pr->name = format (0, "%s%c", name, 0);
 
index 0226271..ffc990a 100644 (file)
@@ -52,8 +52,8 @@ vfio_map_regions (vlib_main_t * vm, int fd)
       vec_foreach_index (i, pr->page_table)
         {
          int rv;
-         dm.vaddr = pointer_to_uword (pr->mem) + (i << pr->log2_page_size);
-         dm.size = 1 << pr->log2_page_size;
+         dm.vaddr = pointer_to_uword (pr->mem) + ((u64)i << pr->log2_page_size);
+         dm.size = 1ull << pr->log2_page_size;
          dm.iova = dm.vaddr;
          vlib_log_debug (lvm->log_default, "map DMA va:0x%lx iova:%lx "
                          "size:0x%lx", dm.vaddr, dm.iova, dm.size);
index 2d968fa..227e55b 100644 (file)
@@ -73,7 +73,8 @@ clib_mem_vm_randomize_va (uword * requested_va, u32 log2_page_size)
   else
     bit_mask = 0;
 
-  *requested_va += (clib_cpu_time_now () & bit_mask) * (1 << log2_page_size);
+  *requested_va +=
+    (clib_cpu_time_now () & bit_mask) * (1ull << log2_page_size);
 }
 
 clib_error_t *
@@ -257,7 +258,7 @@ clib_mem_vm_ext_free (clib_mem_vm_alloc_t * a)
 {
   if (a != 0)
     {
-      clib_mem_vm_free (a->addr, 1 << a->log2_page_size);
+      clib_mem_vm_free (a->addr, 1ull << a->log2_page_size);
       if (a->fd != -1)
        close (a->fd);
     }