DragonFlyBSD Kernel Audit
DF-1305 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/drm/radeon/kv_dpm.c b/sys/dev/drm/radeon/kv_dpm.c
--- a/sys/dev/drm/radeon/kv_dpm.c
+++ b/sys/dev/drm/radeon/kv_dpm.c
@@ -2352,7 +2352,7 @@
 		u32 vid_2bit;
 
 		pi->graphics_dpm_level_count = 0;
-		for (i = 0; i < table->count; i++) {
+		for (i = 0; i < table->count && i < SMU__NUM_SCLK_DPM_STATE; i++) {
 			if (pi->high_voltage_t &&
 			    (pi->high_voltage_t <
 			     kv_convert_8bit_index_to_voltage(rdev, table->entries[i].v)))
@@ -2363,7 +2363,7 @@
 							   &pi->sys_info.vid_mapping_table,
 							   table->entries[i].v);
 			kv_set_vid(rdev, i, vid_2bit);
-			kv_set_at(rdev, i, pi->at[i]);
+			kv_set_at(rdev, i, (i < SUMO_MAX_HARDWARE_POWERLEVELS) ? pi->at[i] : 0);
 			kv_dpm_power_level_enabled_for_throttle(rdev, i, true);
 			pi->graphics_dpm_level_count++;
 		}
@@ -2372,7 +2372,7 @@
 			&pi->sys_info.sclk_voltage_mapping_table;
 
 		pi->graphics_dpm_level_count = 0;
-		for (i = 0; i < table->num_max_dpm_entries; i++) {
+		for (i = 0; i < table->num_max_dpm_entries && i < SUMO_MAX_HARDWARE_POWERLEVELS; i++) {
 			if (pi->high_voltage_t &&
 			    pi->high_voltage_t <
 			    kv_convert_2bit_index_to_voltage(rdev, table->entries[i].vid_2bit))