⬢ DragonFlyBSD Kernel Audit
DF-3972 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/drm/radeon/btc_dpm.c
+++ b/sys/dev/drm/radeon/btc_dpm.c
@@ -2574,6 +2574,11 @@
 	ret = rv7xx_parse_power_table(rdev);
 	if (ret)
 		return ret;
+
+	if (rdev->pm.dpm.boot_ps == NULL) {
+		DRM_ERROR("Missing BOOT state in VBIOS power table\n");
+		return -EINVAL;
+	}
 	ret = r600_parse_extended_power_table(rdev);
 	if (ret)
 		return ret;
--- a/sys/dev/drm/radeon/radeon_pm.c
+++ b/sys/dev/drm/radeon/radeon_pm.c
@@ -1445,7 +1445,11 @@
 
 	INIT_WORK(&rdev->pm.dpm.thermal.work, radeon_dpm_thermal_work_handler);
 	mutex_lock(&rdev->pm.mutex);
-	radeon_dpm_init(rdev);
+	ret = radeon_dpm_init(rdev);
+	if (ret) {
+		mutex_unlock(&rdev->pm.mutex);
+		goto dpm_failed;
+	}
 	rdev->pm.dpm.current_ps = rdev->pm.dpm.requested_ps = rdev->pm.dpm.boot_ps;
 	if (radeon_dpm == 1)
 		radeon_dpm_print_power_states(rdev);