DF-1401 / fix.diff
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) |