]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/amd/display: Fix USB4 null pointer dereference in update_psp_stream_config
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Fri, 17 Dec 2021 19:18:59 +0000 (14:18 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 28 Dec 2021 21:51:24 +0000 (16:51 -0500)
[Why]
A porting error on a previous patch left the block of code that
causes the crash from a NULL pointer dereference.

More specifically, we try to access link_enc before it's assigned in
the USB4 case in the following assignment:

config.dio_output_idx = link_enc->transmitter - TRANSMITTER_UNIPHY_A;

[How]
That assignment occurs later depending on the ASIC version. It's only
needed on DCN31 and only after link_enc is already assigned.

Fixes: f13ee0a317ff3a ("drm/amd/display: fix a crash on USB4 over C20 PHY")
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_link.c

index c8457babfdea428b57a6bd5084f61cd0fa5208a4..c0bdc23702c83e2395160b1dd37e2336e2b8f083 100644 (file)
@@ -3945,12 +3945,9 @@ static void update_psp_stream_config(struct pipe_ctx *pipe_ctx, bool dpms_off)
                config.dig_be = pipe_ctx->stream->link->link_enc_hw_inst;
 #if defined(CONFIG_DRM_AMD_DC_DCN)
                config.stream_enc_idx = pipe_ctx->stream_res.stream_enc->id - ENGINE_ID_DIGA;
-               
+
                if (pipe_ctx->stream->link->ep_type == DISPLAY_ENDPOINT_PHY ||
                                pipe_ctx->stream->link->ep_type == DISPLAY_ENDPOINT_USB4_DPIA) {
-                       link_enc = pipe_ctx->stream->link->link_enc;
-                       config.dio_output_type = pipe_ctx->stream->link->ep_type;
-                       config.dio_output_idx = link_enc->transmitter - TRANSMITTER_UNIPHY_A;
                        if (pipe_ctx->stream->link->ep_type == DISPLAY_ENDPOINT_PHY)
                                link_enc = pipe_ctx->stream->link->link_enc;
                        else if (pipe_ctx->stream->link->ep_type == DISPLAY_ENDPOINT_USB4_DPIA)