⬢ DragonFlyBSD Kernel Audit
DF-4127 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/drm/radeon/rv6xx_dpm.c
+++ b/sys/dev/drm/radeon/rv6xx_dpm.c
@@ -534,10 +534,19 @@ static inline u32 rv6xx_calculate_vco_frequency(u32 ref_clock,
 static inline u32 rv6xx_calculate_spread_spectrum_clk_v(u32 vco_freq, u32 ref_freq,
 							u32 ss_rate, u32 ss_percent,
 							u32 fb_divider_scale)
 {
-	u32 fb_divider = vco_freq / ref_freq;
+	u32 denom, fb_divider;
+
+	if (ref_freq == 0)
+		return 0;
+
+	fb_divider = vco_freq / ref_freq;
 
-	return (ss_percent * ss_rate * 4 * (fb_divider * fb_divider) /
-		(5375 * ((vco_freq * 10) / (4096 >> fb_divider_scale))));
+	denom = 5375 * ((vco_freq * 10) / (4096 >> fb_divider_scale));
+	if (denom == 0)
+		return 0;
+
+	return (ss_percent * ss_rate * 4 * (fb_divider * fb_divider) / denom);
 }
# NOTE: authored against the read-only sys/ tree after verification; never applied there.