From: Leo Chen <leo.c...@amd.com>

[ Upstream commit 2c437d9a0b496168e1a1defd17b531f0a526dbe9 ]

[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....@amd.com>
Reviewed-by: Nicholas Kazlauskas <nicholas.kazlaus...@amd.com>
Signed-off-by: Leo Chen <leo.c...@amd.com>
Signed-off-by: Wayne Lin <wayne....@amd.com>
Tested-by: Daniel Wheeler <daniel.whee...@amd.com>
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 .../gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c    | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c 
b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c
index a54d7358d9e9b..c6867b0849a87 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c
@@ -242,11 +242,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;
@@ -256,6 +256,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));
        }
-- 
2.43.0

Reply via email to