DragonFlyBSD Kernel Audit
DF-1142 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/drm/amd/amdgpu/ci_dpm.c b/sys/dev/drm/amd/amdgpu/ci_dpm.c
--- a/sys/dev/drm/amd/amdgpu/ci_dpm.c
+++ b/sys/dev/drm/amd/amdgpu/ci_dpm.c
@@ -2789,7 +2789,8 @@
 	int ret = -EINVAL;
 
 	table->UvdLevelCount =
-		adev->pm.dpm.dyn_state.uvd_clock_voltage_dependency_table.count;
+		min_t(u8, adev->pm.dpm.dyn_state.uvd_clock_voltage_dependency_table.count,
+		      SMU7_MAX_LEVELS_UVD);
 
 	for (count = 0; count < table->UvdLevelCount; count++) {
 		table->UvdLevel[count].VclkFrequency =
@@ -2832,7 +2833,8 @@
 	int ret = -EINVAL;
 
 	table->VceLevelCount =
-		adev->pm.dpm.dyn_state.vce_clock_voltage_dependency_table.count;
+		min_t(u8, adev->pm.dpm.dyn_state.vce_clock_voltage_dependency_table.count,
+		      SMU7_MAX_LEVELS_VCE);
 
 	for (count = 0; count < table->VceLevelCount; count++) {
 		table->VceLevel[count].Frequency =
@@ -2864,8 +2866,9 @@
 	struct atom_clock_dividers dividers;
 	int ret = -EINVAL;
 
-	table->AcpLevelCount = (u8)
-		(adev->pm.dpm.dyn_state.acp_clock_voltage_dependency_table.count);
+	table->AcpLevelCount =
+		min_t(u8, adev->pm.dpm.dyn_state.acp_clock_voltage_dependency_table.count,
+		      SMU7_MAX_LEVELS_ACP);
 
 	for (count = 0; count < table->AcpLevelCount; count++) {
 		table->AcpLevel[count].Frequency =
@@ -2897,7 +2900,8 @@
 	int ret = -EINVAL;
 
 	table->SamuLevelCount =
-		adev->pm.dpm.dyn_state.samu_clock_voltage_dependency_table.count;
+		min_t(u8, adev->pm.dpm.dyn_state.samu_clock_voltage_dependency_table.count,
+		      SMU7_MAX_LEVELS_SAMU);
 
 	for (count = 0; count < table->SamuLevelCount; count++) {
 		table->SamuLevel[count].Frequency =