[PATCH] drm/amd/display: Fix USB4 null pointer dereference in update_psp_stream_config

Harry Wentland harry.wentland at amd.com
Fri Dec 17 20:29:27 UTC 2021


On 2021-12-17 14:25, Nicholas Kazlauskas wrote:
> [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: 35b6fe499be7 ("drm/amd/display: fix a crash on USB4 over C20 PHY")
> Cc: Rodrigo Siqueira <Rodrigo.Siqueira at amd.com>
> Cc: Harry Wentland <harry.wentland at amd.com>
> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>

Reviewed-by: Harry Wentland <harry.wentland at amd.com>

Harry

> ---
>  drivers/gpu/drm/amd/display/dc/core/dc_link.c | 5 +----
>  1 file changed, 1 insertion(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
> index 3d75f56a939c..857941d83f1f 100644
> --- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
> +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
> @@ -4009,12 +4009,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)



More information about the amd-gfx mailing list