diff
--- a/drivers/gpu/drm/xen/xen_drm_front_xengfx.c
+++ b/drivers/gpu/drm/xen/xen_drm_front_xengfx.c
@@ -95,8 +95,13 @@
 	}
 
 	for (level = 1; level < num_level; level++) {
-		if (level >= XE_MAX_PT_LEVELS) {
+		u32 offset_multiplier = level - 1;
+		u32 offset = offset_multiplier * XE_PAGE_SIZE;
+
+		if (offset / XE_PAGE_SIZE != offset_multiplier) {
+			/* Multiplication overflow */
 			return -EINVAL;
 		}
-		entry = vm->pt_ops->pde_encode_bo(bo, map_ofs + (level - 1) *
-				XE_PAGE_SIZE);
+
+		entry = vm->pt_ops->pde_encode_bo(bo, map_ofs + offset);
 		if (level + 1 == num_level) {

