DragonFlyBSD Kernel Audit
DF-1138 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/drm/radeon/si_dpm.c b/sys/dev/drm/radeon/si_dpm.c
--- a/sys/dev/drm/radeon/si_dpm.c
+++ b/sys/dev/drm/radeon/si_dpm.c
@@ -6883,6 +6883,12 @@
 	for (i = 0; i < RADEON_MAX_VCE_LEVELS; i++) {
 		u32 sclk, mclk;
 		clock_array_index = rdev->pm.dpm.vce_states[i].clk_idx;
+		if (clock_array_index >= clock_info_array->ucNumEntries) {
+			dev_warn(rdev->dev, "invalid vce clk_idx %d (>= %u)\n",
+				 clock_array_index,
+				 clock_info_array->ucNumEntries);
+			continue;
+		}
 		clock_info = (union pplib_clock_info *)
 			&clock_info_array->clockInfo[clock_array_index * clock_info_array->ucEntrySize];
 		sclk = le16_to_cpu(clock_info->si.usEngineClockLow);