⬢ DragonFlyBSD Kernel Audit
DF-3648 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/drm/radeon/ci_dpm.c
+++ b/sys/dev/drm/radeon/ci_dpm.c
@@ -2862,6 +2862,11 @@ static int ci_calculate_mclk_params(struct radeon_device *rdev,
 		u32 tmp;
 		u32 reference_clock = rdev->clock.mpll.reference_freq;
 
+		if (reference_clock == 0) {
+			DRM_ERROR("invalid mpll reference clock\n");
+			return -EINVAL;
+		}
+
 		if (mpll_param.qdr == 1)
 			freq_nom = memory_clock * 4 * (1 << mpll_param.post_div);
 		else
@@ -3200,6 +3205,12 @@ static int ci_calculate_sclk_params(struct radeon_device *rdev,
 	if (pi->caps_sclk_ss_support) {
 		struct radeon_atom_ss ss;
 		u32 vco_freq = engine_clock * dividers.post_div;
 
+		if (reference_clock == 0) {
+			DRM_ERROR("invalid spll reference clock\n");
+			return -EINVAL;
+		}
 		if (radeon_atombios_get_asic_ss_info(rdev, &ss,
 						     ASIC_INTERNAL_ENGINE_SS, vco_freq)) {