DragonFlyBSD Kernel Audit
DF-1180 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/sys/dev/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
--- a/sys/dev/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
+++ b/sys/dev/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
@@ -1035,7 +1035,8 @@
 
 	vol_table->mask_low = 0;
 	vol_table->phase_delay = 0;
-	vol_table->count = dep_table->count;
+	vol_table->count = min(dep_table->count,
+			(uint32_t)PP_ATOMFWCTRL_MAX_VOLTAGE_ENTRIES);
 
 	for (i = 0; i < vol_table->count; i++) {
 		vol_table->entries[i].value = dep_table->entries[i].mvdd;
@@ -1062,9 +1063,10 @@
 
 	vol_table->mask_low = 0;
 	vol_table->phase_delay = 0;
-	vol_table->count = dep_table->count;
+	vol_table->count = min(dep_table->count,
+			(uint32_t)PP_ATOMFWCTRL_MAX_VOLTAGE_ENTRIES);
 
-	for (i = 0; i < dep_table->count; i++) {
+	for (i = 0; i < vol_table->count; i++) {
 		vol_table->entries[i].value = dep_table->entries[i].vddci;
 		vol_table->entries[i].smio_low = 0;
 	}
@@ -1088,7 +1090,8 @@
 
 	vol_table->mask_low = 0;
 	vol_table->phase_delay = 0;
-	vol_table->count = dep_table->count;
+	vol_table->count = min(dep_table->count,
+			(uint32_t)PP_ATOMFWCTRL_MAX_VOLTAGE_ENTRIES);
 
 	for (i = 0; i < vol_table->count; i++) {
 		vol_table->entries[i].value = dep_table->entries[i].vddc;