Correct address calculation for VPP-1168 50/11350/6
authorLee Roberts <[email protected]>
Sun, 25 Mar 2018 04:46:19 +0000 (22:46 -0600)
committerDamjan Marion <[email protected]>
Mon, 26 Mar 2018 11:23:26 +0000 (11:23 +0000)
Use (u64) cast to ensure proper address calculations.

Change-Id: Ifbbe66072eb94bfe33ac04eaa4416abceeb7245e
Signed-off-by: Lee Roberts <[email protected]>
src/vlib/linux/physmem.c
src/vppinfra/linux/mem.c

index 161dbf5..6f5ef7e 100644 (file)
@@ -154,7 +154,8 @@ unix_physmem_region_iommu_register (vlib_physmem_region_t * pr)
 
   vec_foreach_index (i, pr->page_table)
   {
-    dma_map.vaddr = pointer_to_uword (pr->mem) + (i << pr->log2_page_size);
+    dma_map.vaddr =
+      pointer_to_uword (pr->mem) + ((u64) i << pr->log2_page_size);
     dma_map.size = 1 << pr->log2_page_size;
     dma_map.iova = pr->page_table[i];
     if (ioctl (fd, VFIO_IOMMU_MAP_DMA, &dma_map) != 0)
@@ -221,7 +222,7 @@ unix_physmem_region_alloc (vlib_main_t * vm, char *name, u32 size,
       int i;
       for (i = 0; i < pr->n_pages; i++)
        {
-         void *ptr = pr->mem + (i << pr->log2_page_size);
+         void *ptr = pr->mem + ((u64) i << pr->log2_page_size);
          int node;
          move_pages (0, 1, &ptr, 0, &node, 0);
          if (numa_node != node)
index 0bc0878..c47dd57 100644 (file)
@@ -167,7 +167,7 @@ clib_mem_vm_ext_alloc (clib_mem_vm_alloc_t * a)
     }
 
   if (fd != -1)
-    if ((ftruncate (fd, n_pages * (1 << log2_page_size))) == -1)
+    if ((ftruncate (fd, (u64) n_pages * (1 << log2_page_size))) == -1)
       {
        err = clib_error_return_unix (0, "ftruncate");
        goto error;