Commit 89939cf2 authored by Meenakshikumar Somasundaram's avatar Meenakshikumar Somasundaram Committed by Alex Deucher
Browse files

drm/amd/display: Fix NULL pointer dereference



[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: default avatarCharlene Liu <charlene.liu@amd.com>
Signed-off-by: default avatarMeenakshikumar Somasundaram <meenakshikumar.somasundaram@amd.com>
Signed-off-by: default avatarAurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
(cherry picked from commit dc69b489)
Cc: stable@vger.kernel.org
parent 211ddde0
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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);
		}
	}
}