drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Documentation/process/deprecated.rst recommends against the use of
kmalloc with dynamic size calculations due to the risk of overflow and
smaller allocation being made than the caller was expecting.
Replace kmalloc() with kmalloc_array() in amdgpu_amdkfd_gfx_v10.c
to make the intended allocation size clearer and avoid potential
overflow issues.
Signed-off-by: Rahul Kumar <rk0006818@gmail.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
index 04ef0ca10541..0239114fb6c4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
@@ -352,7 +352,7 @@ static int kgd_hqd_dump(struct amdgpu_device *adev,
(*dump)[i++][1] = RREG32_SOC15_IP(GC, addr); \
} while (0)
- *dump = kmalloc(HQD_N_REGS*2*sizeof(uint32_t), GFP_KERNEL);
+ *dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
if (*dump == NULL)
return -ENOMEM;
@@ -449,7 +449,7 @@ static int kgd_hqd_sdma_dump(struct amdgpu_device *adev,
#undef HQD_N_REGS
#define HQD_N_REGS (19+6+7+10)
- *dump = kmalloc(HQD_N_REGS*2*sizeof(uint32_t), GFP_KERNEL);
+ *dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL);
if (*dump == NULL)
return -ENOMEM;
--
2.43.0
On 2025-09-16 05:29, Rahul Kumar wrote: > Documentation/process/deprecated.rst recommends against the use of > kmalloc with dynamic size calculations due to the risk of overflow and > smaller allocation being made than the caller was expecting. > > Replace kmalloc() with kmalloc_array() in amdgpu_amdkfd_gfx_v10.c > to make the intended allocation size clearer and avoid potential > overflow issues. > > Signed-off-by: Rahul Kumar <rk0006818@gmail.com> The patch looks good to me. Looks like this got fixed in GFX9 and older but that didn't make it into GFX10 and newer implementations that were probably on some internal branch at the time. For the sake of completeness and consistency the same fix should be applied to amdgpu_amdkfd_gfx_v10_3.c, amdgpu_amdkfd_gfx_v11.c and amdgpu_amdkfd_gfx_v12.c. Can you send an updated patch that includes them as well? Thanks, Felix > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c > index 04ef0ca10541..0239114fb6c4 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c > @@ -352,7 +352,7 @@ static int kgd_hqd_dump(struct amdgpu_device *adev, > (*dump)[i++][1] = RREG32_SOC15_IP(GC, addr); \ > } while (0) > > - *dump = kmalloc(HQD_N_REGS*2*sizeof(uint32_t), GFP_KERNEL); > + *dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL); > if (*dump == NULL) > return -ENOMEM; > > @@ -449,7 +449,7 @@ static int kgd_hqd_sdma_dump(struct amdgpu_device *adev, > #undef HQD_N_REGS > #define HQD_N_REGS (19+6+7+10) > > - *dump = kmalloc(HQD_N_REGS*2*sizeof(uint32_t), GFP_KERNEL); > + *dump = kmalloc_array(HQD_N_REGS, sizeof(**dump), GFP_KERNEL); > if (*dump == NULL) > return -ENOMEM; >
© 2016 - 2025 Red Hat, Inc.