]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/radeon/r600_cs: Fix possible int overflow in r600_packet3_check()
authorIgor Artemiev <Igor.A.Artemiev@mcst.ru>
Fri, 27 Sep 2024 15:07:19 +0000 (18:07 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 14 Dec 2024 18:51:36 +0000 (19:51 +0100)
[ Upstream commit a1e2da6a5072f8abe5b0feaa91a5bcd9dc544a04 ]

It is possible, although unlikely, that an integer overflow will occur
when the result of radeon_get_ib_value() is shifted to the left.

Avoid it by casting one of the operands to larger data type (u64).

Found by Linux Verification Center (linuxtesting.org) with static
analysis tool SVACE.

Signed-off-by: Igor Artemiev <Igor.A.Artemiev@mcst.ru>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/radeon/r600_cs.c

index 6ade5dd470d5f238d0b3be341c43f041e2d4be60..7fe2c49854987679b1a1ebfc2181b34d15319ec9 100644 (file)
@@ -2106,7 +2106,7 @@ static int r600_packet3_check(struct radeon_cs_parser *p,
                                return -EINVAL;
                        }
 
-                       offset = radeon_get_ib_value(p, idx+1) << 8;
+                       offset = (u64)radeon_get_ib_value(p, idx+1) << 8;
                        if (offset != track->vgt_strmout_bo_offset[idx_value]) {
                                DRM_ERROR("bad STRMOUT_BASE_UPDATE, bo offset does not match: 0x%llx, 0x%x\n",
                                          offset, track->vgt_strmout_bo_offset[idx_value]);