| From 6c5731190e6da61db488c2f6ee4801da61d2a910 Mon Sep 17 00:00:00 2001 |
| From: Tom St Denis <tom.stdenis@amd.com> |
| Date: Tue, 10 Mar 2020 08:40:41 -0400 |
| Subject: [PATCH] drm/amd/amdgpu: Fix GPR read from debugfs (v2) |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| commit 5bbc6604a62814511c32f2e39bc9ffb2c1b92cbe upstream. |
| |
| The offset into the array was specified in bytes but should |
| be in terms of 32-bit words. Also prevent large reads that |
| would also cause a buffer overread. |
| |
| v2: Read from correct offset from internal storage buffer. |
| |
| Signed-off-by: Tom St Denis <tom.stdenis@amd.com> |
| Acked-by: Christian Kรถnig <christian.koenig@amd.com> |
| Reviewed-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |
| index 91bfb24f963e..9d7d47f348f4 100644 |
| --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |
| @@ -690,11 +690,11 @@ static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf, |
| ssize_t result = 0; |
| uint32_t offset, se, sh, cu, wave, simd, thread, bank, *data; |
| |
| - if (size & 3 || *pos & 3) |
| + if (size > 4096 || size & 3 || *pos & 3) |
| return -EINVAL; |
| |
| /* decode offset */ |
| - offset = *pos & GENMASK_ULL(11, 0); |
| + offset = (*pos & GENMASK_ULL(11, 0)) >> 2; |
| se = (*pos & GENMASK_ULL(19, 12)) >> 12; |
| sh = (*pos & GENMASK_ULL(27, 20)) >> 20; |
| cu = (*pos & GENMASK_ULL(35, 28)) >> 28; |
| @@ -725,7 +725,7 @@ static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf, |
| while (size) { |
| uint32_t value; |
| |
| - value = data[offset++]; |
| + value = data[result >> 2]; |
| r = put_user(value, (uint32_t *)buf); |
| if (r) { |
| result = r; |
| -- |
| 2.7.4 |
| |