]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Adding array index check to prevent memory corruption
authorLeo Chen <leo.chen@amd.com>
Mon, 7 Oct 2024 19:50:35 +0000 (15:50 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 22 Oct 2024 21:50:38 +0000 (17:50 -0400)
[Why & How]
Array indices out of bound caused memory corruption. Adding checks to
ensure that array index stays in bound.

Reviewed-by: Charlene Liu <charlene.liu@amd.com>
Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: Leo Chen <leo.chen@amd.com>
Signed-off-by: Wayne Lin <wayne.lin@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c

index b46a3afe48ca7c34510931c025de539dcf24ad79..7d68006137a97f5f2dfdf6a812ebfb601ae54f35 100644 (file)
@@ -257,11 +257,11 @@ static void dcn35_notify_host_router_bw(struct clk_mgr *clk_mgr_base, struct dc_
        struct clk_mgr_internal *clk_mgr = TO_CLK_MGR_INTERNAL(clk_mgr_base);
        uint32_t host_router_bw_kbps[MAX_HOST_ROUTERS_NUM] = { 0 };
        int i;
-
        for (i = 0; i < context->stream_count; ++i) {
                const struct dc_stream_state *stream = context->streams[i];
                const struct dc_link *link = stream->link;
-               uint8_t lowest_dpia_index = 0, hr_index = 0;
+               uint8_t lowest_dpia_index = 0;
+               unsigned int hr_index = 0;
 
                if (!link)
                        continue;
@@ -271,6 +271,8 @@ static void dcn35_notify_host_router_bw(struct clk_mgr *clk_mgr_base, struct dc_
                        continue;
 
                hr_index = (link->link_index - lowest_dpia_index) / 2;
+               if (hr_index >= MAX_HOST_ROUTERS_NUM)
+                       continue;
                host_router_bw_kbps[hr_index] += dc_bandwidth_in_kbps_from_timing(
                        &stream->timing, dc_link_get_highest_encoding_format(link));
        }