DragonFlyBSD Kernel Audit
DF-1401 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/drm/radeon/trinity_dpm.c b/sys/dev/drm/radeon/trinity_dpm.c
index 1111111..2222222 100644
--- a/sys/dev/drm/radeon/trinity_dpm.c
+++ b/sys/dev/drm/radeon/trinity_dpm.c
@@ -1772,6 +1772,14 @@
 		u8 *idx;
 		power_state = (union pplib_power_state *)power_state_offset;
 		non_clock_array_index = power_state->v2.nonClockInfoIndex;
+		if (non_clock_array_index >= non_clock_info_array->ucNumEntries) {
+			DRM_ERROR("Invalid non-clock index %u (num entries %u)\n",
+				  non_clock_array_index,
+				  non_clock_info_array->ucNumEntries);
+			kfree(rdev->pm.dpm.ps);
+			rdev->pm.dpm.ps = NULL;
+			return -EINVAL;
+		}
 		non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
 			&non_clock_info_array->nonClockInfo[non_clock_array_index];
 		if (!rdev->pm.power_state[i].clock_info)