aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0850-drm-amdgpu-Cast-to-uint64_t-before-left-shift.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0850-drm-amdgpu-Cast-to-uint64_t-before-left-shift.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0850-drm-amdgpu-Cast-to-uint64_t-before-left-shift.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0850-drm-amdgpu-Cast-to-uint64_t-before-left-shift.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0850-drm-amdgpu-Cast-to-uint64_t-before-left-shift.patch
new file mode 100644
index 00000000..667c4349
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0850-drm-amdgpu-Cast-to-uint64_t-before-left-shift.patch
@@ -0,0 +1,56 @@
+From 4bf8e9476e54233c1e2bd486a719e83ae7a73fe1 Mon Sep 17 00:00:00 2001
+From: Felix Kuehling <Felix.Kuehling@amd.com>
+Date: Sat, 24 Nov 2018 22:46:23 -0500
+Subject: [PATCH 0850/2940] drm/amdgpu: Cast to uint64_t before left shift
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Avoid potential integer overflows with left shift in huge-page mapping
+code by casting the operand to uin64_t first.
+
+Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+index 90df2ff779d3..5141c359cc18 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+@@ -181,7 +181,7 @@ static unsigned amdgpu_vm_num_entries(struct amdgpu_device *adev,
+
+ if (level == adev->vm_manager.root_level)
+ /* For the root directory */
+- return round_up(adev->vm_manager.max_pfn, 1 << shift) >> shift;
++ return round_up(adev->vm_manager.max_pfn, 1ULL << shift) >> shift;
+ else if (level != AMDGPU_VM_PTB)
+ /* Everything in between */
+ return 512;
+@@ -1658,10 +1658,10 @@ static int amdgpu_vm_update_ptes(struct amdgpu_pte_update_params *params,
+ }
+
+ /* Looks good so far, calculate parameters for the update */
+- incr = AMDGPU_GPU_PAGE_SIZE << shift;
++ incr = (uint64_t)AMDGPU_GPU_PAGE_SIZE << shift;
+ mask = amdgpu_vm_entries_mask(adev, cursor.level);
+ pe_start = ((cursor.pfn >> shift) & mask) * 8;
+- entry_end = (mask + 1) << shift;
++ entry_end = (uint64_t)(mask + 1) << shift;
+ entry_end += cursor.pfn & ~(entry_end - 1);
+ entry_end = min(entry_end, end);
+
+@@ -1674,7 +1674,7 @@ static int amdgpu_vm_update_ptes(struct amdgpu_pte_update_params *params,
+ flags | AMDGPU_PTE_FRAG(frag));
+
+ pe_start += nptes * 8;
+- dst += nptes * AMDGPU_GPU_PAGE_SIZE << shift;
++ dst += (uint64_t)nptes * AMDGPU_GPU_PAGE_SIZE << shift;
+
+ frag_start = upd_end;
+ if (frag_start >= frag_end) {
+--
+2.17.1
+