[PATCH] drm/amd/display: Add 'replay' NULL check in 'edp_set_replay_allow_active()'

Chung, ChiaHsuan (Tom) chiahsuan.chung at amd.com
Fri Feb 16 08:30:11 UTC 2024


Reviewed-by: Tom Chung <chiahsuan.chung at amd.com>

On 2/15/2024 9:31 PM, Srinivasan Shanmugam wrote:
> In the first if statement, we're checking if 'replay' is NULL. But in
> the second if statement, we're not checking if 'replay' is NULL again
> before calling replay->funcs->replay_set_power_opt().
>
> if (replay == NULL && force_static)
>      return false;
>
> ...
>
> if (link->replay_settings.replay_feature_enabled &&
>      replay->funcs->replay_set_power_opt) {
> 	replay->funcs->replay_set_power_opt(replay, *power_opts, panel_inst);
> 	link->replay_settings.replay_power_opt_active = *power_opts;
> }
>
> If 'replay' is NULL, this will cause a null pointer dereference.
>
> Fixes the below found by smatch:
> drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_edp_panel_control.c:895 edp_set_replay_allow_active() error: we previously assumed 'replay' could be null (see line 887)
>
> Fixes: c7ddc0a800bc ("drm/amd/display: Add Functions to enable Freesync Panel Replay")
> Cc: Bhawanpreet Lakha<Bhawanpreet.Lakha at amd.com>
> Cc: Roman Li<roman.li at amd.com>
> Cc: Rodrigo Siqueira<Rodrigo.Siqueira at amd.com>
> Cc: Aurabindo Pillai<aurabindo.pillai at amd.com>
> Cc: Tom Chung<chiahsuan.chung at amd.com>
> Suggested-by: Tom Chung<chiahsuan.chung at amd.com>
> Signed-off-by: Srinivasan Shanmugam<srinivasan.shanmugam at amd.com>
> ---
>   .../drm/amd/display/dc/link/protocols/link_edp_panel_control.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
> index 443215b96308..acfbbc638cc6 100644
> --- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
> +++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_edp_panel_control.c
> @@ -892,7 +892,8 @@ bool edp_set_replay_allow_active(struct dc_link *link, const bool *allow_active,
>   
>   	/* Set power optimization flag */
>   	if (power_opts && link->replay_settings.replay_power_opt_active != *power_opts) {
> -		if (link->replay_settings.replay_feature_enabled && replay->funcs->replay_set_power_opt) {
> +		if (replay != NULL && link->replay_settings.replay_feature_enabled &&
> +		    replay->funcs->replay_set_power_opt) {
>   			replay->funcs->replay_set_power_opt(replay, *power_opts, panel_inst);
>   			link->replay_settings.replay_power_opt_active = *power_opts;
>   		}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20240216/d099d754/attachment.htm>


More information about the amd-gfx mailing list