mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-24 07:31:41 +00:00
drm/amd/amdgpu: Fix GPR read from debugfs (v2)
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>
This commit is contained in:
parent
c8d6396b00
commit
6397ec580d
1 changed files with 3 additions and 3 deletions
|
@ -784,11 +784,11 @@ static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf,
|
||||||
ssize_t result = 0;
|
ssize_t result = 0;
|
||||||
uint32_t offset, se, sh, cu, wave, simd, thread, bank, *data;
|
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;
|
return -EINVAL;
|
||||||
|
|
||||||
/* decode offset */
|
/* decode offset */
|
||||||
offset = *pos & GENMASK_ULL(11, 0);
|
offset = (*pos & GENMASK_ULL(11, 0)) >> 2;
|
||||||
se = (*pos & GENMASK_ULL(19, 12)) >> 12;
|
se = (*pos & GENMASK_ULL(19, 12)) >> 12;
|
||||||
sh = (*pos & GENMASK_ULL(27, 20)) >> 20;
|
sh = (*pos & GENMASK_ULL(27, 20)) >> 20;
|
||||||
cu = (*pos & GENMASK_ULL(35, 28)) >> 28;
|
cu = (*pos & GENMASK_ULL(35, 28)) >> 28;
|
||||||
|
@ -826,7 +826,7 @@ static ssize_t amdgpu_debugfs_gpr_read(struct file *f, char __user *buf,
|
||||||
while (size) {
|
while (size) {
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
|
|
||||||
value = data[offset++];
|
value = data[result >> 2];
|
||||||
r = put_user(value, (uint32_t *)buf);
|
r = put_user(value, (uint32_t *)buf);
|
||||||
if (r) {
|
if (r) {
|
||||||
result = r;
|
result = r;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue