Commit 245a0221 authored by Aric Cyr's avatar Aric Cyr Committed by Alex Deucher

drm/amd/display: Guard against invalid array access

[Why]
There are scenarios where no OPP is assigned to an OTG so its value is
0xF which is outside the size of the OPP array causing a potential
driver crash.

[How]
Change the assert to an early return to guard against access.  If
there's no OPP assigned already, then OTG will be blank anyways so no
functionality should be lost.
Signed-off-by: default avatarAric Cyr <aric.cyr@amd.com>
Reviewed-by: default avatarZhan Liu <Zhan.Liu@amd.com>
Acked-by: default avatarQingqing Zhuo <qingqing.zhuo@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 15ce104c
...@@ -291,12 +291,20 @@ void dcn20_init_blank( ...@@ -291,12 +291,20 @@ void dcn20_init_blank(
/* get the OPTC source */ /* get the OPTC source */
tg->funcs->get_optc_source(tg, &num_opps, &opp_id_src0, &opp_id_src1); tg->funcs->get_optc_source(tg, &num_opps, &opp_id_src0, &opp_id_src1);
ASSERT(opp_id_src0 < dc->res_pool->res_cap->num_opp);
if (opp_id_src0 >= dc->res_pool->res_cap->num_opp) {
ASSERT(false);
return;
}
opp = dc->res_pool->opps[opp_id_src0]; opp = dc->res_pool->opps[opp_id_src0];
if (num_opps == 2) { if (num_opps == 2) {
otg_active_width = otg_active_width / 2; otg_active_width = otg_active_width / 2;
ASSERT(opp_id_src1 < dc->res_pool->res_cap->num_opp);
if (opp_id_src1 >= dc->res_pool->res_cap->num_opp) {
ASSERT(false);
return;
}
bottom_opp = dc->res_pool->opps[opp_id_src1]; bottom_opp = dc->res_pool->opps[opp_id_src1];
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment