[PATCH v2] drm/display: fix possible null-pointer dereference in dcn10_set_clock()
Alex Deucher
alexdeucher at gmail.com
Wed Aug 11 20:22:43 UTC 2021
Applied. Thanks!
Alex
On Wed, Aug 11, 2021 at 9:46 AM Tuo Li <islituo at gmail.com> wrote:
>
> The variable dc->clk_mgr is checked in:
> if (dc->clk_mgr && dc->clk_mgr->funcs->get_clock)
>
> This indicates dc->clk_mgr can be NULL.
> However, it is dereferenced in:
> if (!dc->clk_mgr->funcs->get_clock)
>
> To fix this null-pointer dereference, check dc->clk_mgr and the function
> pointer dc->clk_mgr->funcs->get_clock earlier, and return if one of them
> is NULL.
>
> Reported-by: TOTE Robot <oslab at tsinghua.edu.cn>
> Signed-off-by: Tuo Li <islituo at gmail.com>
> ---
> v2:
> * Move the check of function pointer dc->clk_mgr->funcs->get_clock earlier
> and return if it is NULL.
> Thank Chen, Guchun for helpful advice.
> ---
> .../gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 11 +++++------
> 1 file changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
> index c545eddabdcc..03e1c643502e 100644
> --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
> +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
> @@ -3631,13 +3631,12 @@ enum dc_status dcn10_set_clock(struct dc *dc,
> struct dc_clock_config clock_cfg = {0};
> struct dc_clocks *current_clocks = &context->bw_ctx.bw.dcn.clk;
>
> - if (dc->clk_mgr && dc->clk_mgr->funcs->get_clock)
> - dc->clk_mgr->funcs->get_clock(dc->clk_mgr,
> - context, clock_type, &clock_cfg);
> -
> - if (!dc->clk_mgr->funcs->get_clock)
> + if (!dc->clk_mgr || !dc->clk_mgr->funcs->get_clock)
> return DC_FAIL_UNSUPPORTED_1;
>
> + dc->clk_mgr->funcs->get_clock(dc->clk_mgr,
> + context, clock_type, &clock_cfg);
> +
> if (clk_khz > clock_cfg.max_clock_khz)
> return DC_FAIL_CLK_EXCEED_MAX;
>
> @@ -3655,7 +3654,7 @@ enum dc_status dcn10_set_clock(struct dc *dc,
> else
> return DC_ERROR_UNEXPECTED;
>
> - if (dc->clk_mgr && dc->clk_mgr->funcs->update_clocks)
> + if (dc->clk_mgr->funcs->update_clocks)
> dc->clk_mgr->funcs->update_clocks(dc->clk_mgr,
> context, true);
> return DC_OK;
> --
> 2.25.1
>
More information about the amd-gfx
mailing list