isl: use 64bit arithmetic to compute size
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Thu, 13 Jul 2017 14:37:43 +0000 (15:37 +0100)
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>
Thu, 13 Jul 2017 21:50:26 +0000 (22:50 +0100)
If we allow the size to be more than 2^32, then we should compute it
in 64bit arithmetic otherwise we might run into overflow issues.

CID: 14128921412891
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
src/intel/isl/isl.c

index ba56d86c1789ec847a815b6d10d04874dbd0d30c..1026fe94952d6540eca7814002332ad9eb1b2c43 100644 (file)
@@ -1469,7 +1469,7 @@ isl_surf_init_s(const struct isl_device *dev,
    uint32_t base_alignment;
    uint64_t size;
    if (tiling == ISL_TILING_LINEAR) {
-      size = row_pitch * padded_h_el + pad_bytes;
+      size = (uint64_t) row_pitch * padded_h_el + pad_bytes;
 
       /* From the Broadwell PRM Vol 2d, RENDER_SURFACE_STATE::SurfaceBaseAddress:
        *
@@ -1494,7 +1494,7 @@ isl_surf_init_s(const struct isl_device *dev,
       const uint32_t total_h_tl =
          isl_align_div(padded_h_el, tile_info.logical_extent_el.height);
 
-      size = total_h_tl * tile_info.phys_extent_B.height * row_pitch;
+      size = (uint64_t) total_h_tl * tile_info.phys_extent_B.height * row_pitch;
 
       const uint32_t tile_size = tile_info.phys_extent_B.width *
                                  tile_info.phys_extent_B.height;