]> 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:48:26 +0000 (19:48 +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 1e6ad9daff534e3f6fbd3ad7e7efe3c1a05293e8..c738740f8b19e381a94e693685d497f14108cd34 100644 (file)
@@ -2102,7 +2102,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]);