diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0991-drm-amd-powerplay-avoid-possible-buffer-overflow.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0991-drm-amd-powerplay-avoid-possible-buffer-overflow.patch | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0991-drm-amd-powerplay-avoid-possible-buffer-overflow.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0991-drm-amd-powerplay-avoid-possible-buffer-overflow.patch new file mode 100644 index 00000000..1f21b1b2 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0991-drm-amd-powerplay-avoid-possible-buffer-overflow.patch @@ -0,0 +1,51 @@ +From fd6f70dae158216bb8c52fa7c020d2f03eef0bda Mon Sep 17 00:00:00 2001 +From: Evan Quan <evan.quan@amd.com> +Date: Tue, 8 Jan 2019 10:33:35 +0800 +Subject: [PATCH 0991/2940] drm/amd/powerplay: avoid possible buffer overflow + +Make sure the clock level enforced is within the allowed +ranges. + +Signed-off-by: Evan Quan <evan.quan@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +Reviewed-by: Likun Gao <Likun.Gao@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@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.17.1 + |