⬢ DragonFlyBSD Kernel Audit
DF-4879 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/drm/drm_mode_config.c b/sys/dev/drm/drm_mode_config.c
index 0000000..0000001 100644
--- a/sys/dev/drm/drm_mode_config.c
+++ b/sys/dev/drm/drm_mode_config.c
@@ -365,14 +365,16 @@ EXPORT_SYMBOL(drm_mode_config_reset);
  * driver's problem to ensure this guarantee.
  *
  */
-void drm_mode_config_init(struct drm_device *dev)
+int drm_mode_config_init(struct drm_device *dev)
 {
+	int ret;
+
 	lockinit(&dev->mode_config.mutex, "drmmcm", 0, LK_CANRECURSE);
 	drm_modeset_lock_init(&dev->mode_config.connection_mutex);
 	lockinit(&dev->mode_config.idr_mutex, "mcfgidr", 0, LK_CANRECURSE);
 	lockinit(&dev->mode_config.fb_lock, "drmfbl", 0, LK_CANRECURSE);
 	lockinit(&dev->mode_config.blob_lock, "drmcbl", 0, LK_CANRECURSE);
@@ -387,9 +389,13 @@ void drm_mode_config_init(struct drm_device *dev)
 	INIT_WORK(&dev->mode_config.connector_free_work, drm_connector_free_work_fn);
 
-	drm_mode_create_standard_properties(dev);
+	ret = drm_mode_create_standard_properties(dev);
+	if (ret)
+		return ret;
 
 	/* Just to be sure */
 	dev->mode_config.num_fb = 0;
@@ -397,6 +403,8 @@ void drm_mode_config_init(struct drm_device *dev)
 	dev->mode_config.num_crtc = 0;
 	dev->mode_config.num_encoder = 0;
 	dev->mode_config.num_total_plane = 0;
+
+	return 0;
 }
 EXPORT_SYMBOL(drm_mode_config_init);
 
diff --git a/sys/dev/drm/include/drm/drm_mode_config.h b/sys/dev/drm/include/drm/drm_mode_config.h
index 0000000..0000002 100644
--- a/sys/dev/drm/include/drm/drm_mode_config.h
+++ b/sys/dev/drm/include/drm/drm_mode_config.h
@@ -869,7 +869,7 @@ struct drm_mode_config {
 	const struct drm_mode_config_helper_funcs *helper_private;
 };
 
-void drm_mode_config_init(struct drm_device *dev);
+int drm_mode_config_init(struct drm_device *dev);
 void drm_mode_config_reset(struct drm_device *dev);
 void drm_mode_config_cleanup(struct drm_device *dev);
 
diff --git a/sys/dev/drm/i915/intel_display.c b/sys/dev/drm/i915/intel_display.c
index 0000000..0000003 100644
--- a/sys/dev/drm/i915/intel_display.c
+++ b/sys/dev/drm/i915/intel_display.c
@@ -15340,7 +15340,10 @@ int intel_modeset_init(struct drm_device *dev)
 	dev_priv->modeset_wq = alloc_ordered_workqueue("i915_modeset", 0);
 
-	drm_mode_config_init(dev);
+	ret = drm_mode_config_init(dev);
+	if (ret)
+		return ret;
 
 	dev->mode_config.min_width = 0;
 	dev->mode_config.min_height = 0;
diff --git a/sys/dev/drm/radeon/radeon_display.c b/sys/dev/drm/radeon/radeon_display.c
index 0000000..0000004 100644
--- a/sys/dev/drm/radeon/radeon_display.c
+++ b/sys/dev/drm/radeon/radeon_display.c
@@ -1576,8 +1576,10 @@ int radeon_modeset_init(struct radeon_device *rdev)
 	int i;
 	int ret;
 
-	drm_mode_config_init(rdev->ddev);
+	ret = drm_mode_config_init(rdev->ddev);
+	if (ret)
+		return ret;
 	rdev->mode_info.mode_config_initialized = true;
 
 	rdev->ddev->mode_config.funcs = &radeon_mode_funcs;
diff --git a/sys/dev/drm/amd/amdgpu/amdgpu_device.c b/sys/dev/drm/amd/amdgpu/amdgpu_device.c
index 0000000..0000005 100644
--- a/sys/dev/drm/amd/amdgpu/amdgpu_device.c
+++ b/sys/dev/drm/amd/amdgpu/amdgpu_device.c
@@ -2601,8 +2601,11 @@ fence_driver_init:
 kprintf("amdgpu_device_init: 8\n");
 	/* init the mode config */
-	drm_mode_config_init(adev->ddev);
+	r = drm_mode_config_init(adev->ddev);
+	if (r)
+		goto failed;
 
 	r = amdgpu_device_ip_init(adev);