[PATCH] drm/amd/powerplay: avoid possible buffer overflow

Alex Deucher alexdeucher at gmail.com
Tue Jan 8 02:52:10 UTC 2019


Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

On Mon, Jan 7, 2019 at 9:36 PM Evan Quan <evan.quan at amd.com> wrote:
>
> Make sure the clock level enforced is within the allowed
> ranges.
>
> Change-Id: If69a8512121c0c94818ab698595502e17569d4c7
> Signed-off-by: Evan Quan <evan.quan at amd.com>
> ---
>  drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
> index 8f6097c6a02b..c2061d351d04 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
> @@ -2251,6 +2251,13 @@ static int vega20_force_clock_level(struct pp_hwmgr *hwmgr,
>                 soft_min_level = mask ? (ffs(mask) - 1) : 0;
>                 soft_max_level = mask ? (fls(mask) - 1) : 0;
>
> +               if (soft_max_level >= data->dpm_table.gfx_table.count) {
> +                       pr_err("Clock level specified %d is over max allowed %d\n",
> +                                       soft_max_level,
> +                                       data->dpm_table.gfx_table.count - 1);
> +                       return -EINVAL;
> +               }
> +
>                 data->dpm_table.gfx_table.dpm_state.soft_min_level =
>                         data->dpm_table.gfx_table.dpm_levels[soft_min_level].value;
>                 data->dpm_table.gfx_table.dpm_state.soft_max_level =
> @@ -2271,6 +2278,13 @@ static int vega20_force_clock_level(struct pp_hwmgr *hwmgr,
>                 soft_min_level = mask ? (ffs(mask) - 1) : 0;
>                 soft_max_level = mask ? (fls(mask) - 1) : 0;
>
> +               if (soft_max_level >= data->dpm_table.mem_table.count) {
> +                       pr_err("Clock level specified %d is over max allowed %d\n",
> +                                       soft_max_level,
> +                                       data->dpm_table.mem_table.count - 1);
> +                       return -EINVAL;
> +               }
> +
>                 data->dpm_table.mem_table.dpm_state.soft_min_level =
>                         data->dpm_table.mem_table.dpm_levels[soft_min_level].value;
>                 data->dpm_table.mem_table.dpm_state.soft_max_level =
> --
> 2.20.1
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list