[PATCH] drm/amdgpu/display: Fix null pointer dereference in dc_stream_program_cursor_position

Harry Wentland harry.wentland at amd.com
Wed May 22 18:05:51 UTC 2024



On 2024-05-22 11:36, Srinivasan Shanmugam wrote:
> The fix involves adding a null check for 'stream' at the beginning of
> the function. If 'stream' is NULL, the function immediately returns
> false. This ensures that 'stream' is not NULL when we dereference it to
> access 'ctx' in 'dc = stream->ctx->dc;' the function.
> 
> Fixes the below:
> 	drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc_stream.c:398 dc_stream_program_cursor_position()
> 	error: we previously assumed 'stream' could be null (see line 397)
> 
> drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc_stream.c
>     389 bool dc_stream_program_cursor_position(
>     390         struct dc_stream_state *stream,
>     391         const struct dc_cursor_position *position)
>     392 {
>     393         struct dc *dc;
>     394         bool reset_idle_optimizations = false;
>     395         const struct dc_cursor_position *old_position;
>     396
>     397         old_position = stream ? &stream->cursor_position : NULL;
>                                ^^^^^^^^
> The patch adds a NULL check
> 
> --> 398         dc = stream->ctx->dc;
>                      ^^^^^^^^
> The old code didn't check
> 
>     399
>     400         if (dc_stream_set_cursor_position(stream, position)) {
>     401                 dc_z10_restore(dc);
>     402
>     403                 /* disable idle optimizations if enabling cursor */
>     404                 if (dc->idle_optimizations_allowed &&
>     405                     (!old_position->enable || dc->debug.exit_idle_opt_for_cursor_updates) &&
>     406                     position->enable) {
>     407                         dc_allow_idle_optimizations(dc, false);
> 
> Fixes: f63f86b5affc ("drm/amd/display: Separate setting and programming of cursor")
> Reported-by: Dan Carpenter <dan.carpenter at linaro.org>
> Cc: Harry Wentland <harry.wentland at amd.com>
> Cc: Tom Chung <chiahsuan.chung at amd.com>
> Cc: Rodrigo Siqueira <Rodrigo.Siqueira at amd.com>
> Cc: Roman Li <roman.li at amd.com>
> Cc: Aurabindo Pillai <aurabindo.pillai at amd.com>
> Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam at amd.com>

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

Harry

> ---
>  drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
> index de48084eac25..55e1c19b97f1 100644
> --- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
> +++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
> @@ -394,7 +394,10 @@ bool dc_stream_program_cursor_position(
>  	bool reset_idle_optimizations = false;
>  	const struct dc_cursor_position *old_position;
>  
> -	old_position = stream ? &stream->cursor_position : NULL;
> +	if (!stream)
> +		return false;
> +
> +	old_position = &stream->cursor_position;
>  	dc = stream->ctx->dc;
>  
>  	if (dc_stream_set_cursor_position(stream, position)) {



More information about the amd-gfx mailing list