| From 06f1a87a64a081c0fa876010d2e772c2ad11bcbf Mon Sep 17 00:00:00 2001 |
| From: Trek <trek00@inbox.ru> |
| Date: Sat, 31 Aug 2019 21:25:36 +0200 |
| Subject: [PATCH] drm/amdgpu: Check for valid number of registers to read |
| |
| commit 73d8e6c7b841d9bf298c8928f228fb433676635c upstream. |
| |
| Do not try to allocate any amount of memory requested by the user. |
| Instead limit it to 128 registers. Actually the longest series of |
| consecutive allowed registers are 48, mmGB_TILE_MODE0-31 and |
| mmGB_MACROTILE_MODE0-15 (0x2644-0x2673). |
| |
| Bug: https://bugs.freedesktop.org/show_bug.cgi?id=111273 |
| Signed-off-by: Trek <trek00@inbox.ru> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c |
| index b17d0545728e..a103998f7212 100644 |
| --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c |
| @@ -662,6 +662,9 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file |
| if (sh_num == AMDGPU_INFO_MMR_SH_INDEX_MASK) |
| sh_num = 0xffffffff; |
| |
| + if (info->read_mmr_reg.count > 128) |
| + return -EINVAL; |
| + |
| regs = kmalloc_array(info->read_mmr_reg.count, sizeof(*regs), GFP_KERNEL); |
| if (!regs) |
| return -ENOMEM; |
| -- |
| 2.7.4 |
| |