[Why]
resource_get_otg_master_for_stream() can return NULL if no OTG master pipe
is found for a given stream. The current code dereferences this pointer
without a NULL check. This may lead to a possible NULL pointer
dereference.

[How]
Add an explicit NULL check and skip the stream if the OTG master is not
found. This is similar to dcn60_update_clocks_update_dtb_dto().

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

Fixes: b6d508533fa1 ("drm/amd/display: fix a crash when clock source is 
reference for non otg master pipe")
Signed-off-by: Roman Demidov <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c 
b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c
index 6ee3da89d058..135eeef68ac4 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c
@@ -538,6 +538,9 @@ static void dcn401_update_clocks_update_dtb_dto(struct 
clk_mgr_internal *clk_mgr
                otg_master = resource_get_otg_master_for_stream(
                                &context->res_ctx, context->streams[i]);
                ASSERT(otg_master);
+               if (!otg_master)
+                       continue;
+
                ASSERT(otg_master->clock_source);
                ASSERT(otg_master->clock_source->funcs->program_pix_clk);
                ASSERT(otg_master->stream_res.pix_clk_params.controller_id >= 
CONTROLLER_ID_D0);
-- 
2.53.0

Reply via email to