The type of size is unsigned, if size is 0x40000000, there will be an
integer overflow, size will be zero after size *= sizeof(uint32_t),
will cause uninitialized memory to be referenced later

Signed-off-by: hackyzh002 <[email protected]>
---
 drivers/gpu/drm/radeon/radeon_cs.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon_cs.c 
b/drivers/gpu/drm/radeon/radeon_cs.c
index 46a27ebf4..472c29050 100644
--- a/drivers/gpu/drm/radeon/radeon_cs.c
+++ b/drivers/gpu/drm/radeon/radeon_cs.c
@@ -270,7 +270,7 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void 
*data)
 {
        struct drm_radeon_cs *cs = data;
        uint64_t *chunk_array_ptr;
-       unsigned size, i;
+       u64 size, i;
        u32 ring = RADEON_CS_RING_GFX;
        s32 priority = 0;
 
@@ -347,7 +347,7 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void 
*data)
                                continue;
                }
 
-               p->chunks[i].kdata = kvmalloc_array(size, sizeof(uint32_t), 
GFP_KERNEL);
+               p->chunks[i].kdata = kvcalloc(size, sizeof(uint32_t), 
GFP_KERNEL);
                size *= sizeof(uint32_t);
                if (p->chunks[i].kdata == NULL) {
                        return -ENOMEM;
-- 
2.34.1

Reply via email to