DragonFlyBSD Kernel Audit
DF-1182 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
+++ b/sys/dev/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
@@ -3038,6 +3038,17 @@
 			"Performance levels exceeds Driver limit!",
 			return -1);
 
+	/* DF-1182: VBIOS-supplied u8 clock indices must be in range. */
+	if (state_entry->ucSocClockIndexLow >= socclk_dep_table->ucNumEntries ||
+	    state_entry->ucSocClockIndexHigh >= socclk_dep_table->ucNumEntries ||
+	    state_entry->ucGfxClockIndexLow >= gfxclk_dep_table->ucNumEntries ||
+	    state_entry->ucGfxClockIndexHigh >= gfxclk_dep_table->ucNumEntries ||
+	    state_entry->ucMemClockIndexLow >= mclk_dep_table->ucNumEntries ||
+	    state_entry->ucMemClockIndexHigh >= mclk_dep_table->ucNumEntries) {
+		pr_err("VBIOS state record clock index out of range\n");
+		return -EINVAL;
+	}
+
 	/* Performance levels are arranged from low to high. */
 	performance_level->soc_clock = socclk_dep_table->entries
 			[state_entry->ucSocClockIndexLow].ulClk;