DragonFlyBSD Kernel Audit
DF-1137 / 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
@@ -6057,6 +6057,14 @@
 	t_diff1 = rdev->pm.dpm.fan.t_med - rdev->pm.dpm.fan.t_min;
 	t_diff2 = rdev->pm.dpm.fan.t_high - rdev->pm.dpm.fan.t_med;
 
+	if (t_diff1 == 0 || t_diff2 == 0) {
+		dev_err(rdev->dev, "invalid thermal fan table: zero temperature delta (t_min=%u t_med=%u t_high=%u)\n",
+			rdev->pm.dpm.fan.t_min, rdev->pm.dpm.fan.t_med,
+			rdev->pm.dpm.fan.t_high);
+		rdev->pm.dpm.fan.ucode_fan_control = false;
+		return -EINVAL;
+	}
+
 	pwm_diff1 = rdev->pm.dpm.fan.pwm_med - rdev->pm.dpm.fan.pwm_min;
 	pwm_diff2 = rdev->pm.dpm.fan.pwm_high - rdev->pm.dpm.fan.pwm_med;