]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/display: Fix NULL pointer dereference
authorMeenakshikumar Somasundaram <meenakshikumar.somasundaram@amd.com>
Mon, 29 Sep 2025 18:28:34 +0000 (14:28 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 20 Oct 2025 22:19:44 +0000 (18:19 -0400)
[Why]
On a mst branch with multi display setup, dc context is obselete
after updating the first stream. Referencing the same dc context
for the next stream update to fetch dc pointer leads to NULL
pointer dereference.

[How]
Get the dc pointer from the link rather than context.

Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Charlene Liu <charlene.liu@amd.com>
Signed-off-by: Meenakshikumar Somasundaram <meenakshikumar.somasundaram@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c

index 1593412354cf841eff3634ac862c9099b3c550b1..1045c268672e2f58bcf6c02db97acb67df808db1 100644 (file)
@@ -78,6 +78,7 @@ static void dp_retrain_link_dp_test(struct dc_link *link,
        struct audio_output audio_output[MAX_PIPES];
        struct dc_stream_state *streams_on_link[MAX_PIPES];
        int num_streams_on_link = 0;
+       struct dc *dc = (struct dc *)link->dc;
 
        needs_divider_update = (link->dc->link_srv->dp_get_encoding_format(link_setting) !=
        link->dc->link_srv->dp_get_encoding_format((const struct dc_link_settings *) &link->cur_link_settings));
@@ -150,7 +151,7 @@ static void dp_retrain_link_dp_test(struct dc_link *link,
                if (streams_on_link[i] && streams_on_link[i]->link && streams_on_link[i]->link == link) {
                        stream_update.stream = streams_on_link[i];
                        stream_update.dpms_off = &dpms_off;
-                       dc_update_planes_and_stream(state->clk_mgr->ctx->dc, NULL, 0, streams_on_link[i], &stream_update);
+                       dc_update_planes_and_stream(dc, NULL, 0, streams_on_link[i], &stream_update);
                }
        }
 }