aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0991-drm-amd-powerplay-avoid-possible-buffer-overflow.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0991-drm-amd-powerplay-avoid-possible-buffer-overflow.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/0991-drm-amd-powerplay-avoid-possible-buffer-overflow.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0991-drm-amd-powerplay-avoid-possible-buffer-overflow.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0991-drm-amd-powerplay-avoid-possible-buffer-overflow.patch
new file mode 100644
index 00000000..1f21b1b2
--- /dev/null
+++ b/common/recipes-kernel/linux/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
+