diff mbox series

drm: omapdrm: Add missing check for alloc_ordered_workqueue

Message ID 20240808061336.2796729-1-make24@iscas.ac.cn (mailing list archive)
State New, archived
Headers show
Series drm: omapdrm: Add missing check for alloc_ordered_workqueue | expand

Commit Message

Ma Ke Aug. 8, 2024, 6:13 a.m. UTC
As it may return NULL pointer and cause NULL pointer dereference. Add check
for the return value of alloc_ordered_workqueue.

Cc: stable@vger.kernel.org
Fixes: 2f95bc6d324a ("drm: omapdrm: Perform initialization/cleanup at probe/remove time")
Signed-off-by: Ma Ke <make24@iscas.ac.cn>
---
 drivers/gpu/drm/omapdrm/omap_drv.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Tomi Valkeinen Aug. 8, 2024, 10:47 a.m. UTC | #1
On 08/08/2024 09:13, Ma Ke wrote:
> As it may return NULL pointer and cause NULL pointer dereference. Add check
> for the return value of alloc_ordered_workqueue.
> 
> Cc: stable@vger.kernel.org
> Fixes: 2f95bc6d324a ("drm: omapdrm: Perform initialization/cleanup at probe/remove time")
> Signed-off-by: Ma Ke <make24@iscas.ac.cn>
> ---
>   drivers/gpu/drm/omapdrm/omap_drv.c | 5 +++++
>   1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
> index 6598c9c08ba1..94a57f0d1c08 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> @@ -695,6 +695,10 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
>   	soc = soc_device_match(omapdrm_soc_devices);
>   	priv->omaprev = soc ? (uintptr_t)soc->data : 0;
>   	priv->wq = alloc_ordered_workqueue("omapdrm", 0);
> +	if (!priv->wq) {
> +		ret = -ENOMEM;
> +		goto err_alloc_workqueue;
> +	}
>   
>   	mutex_init(&priv->list_lock);
>   	INIT_LIST_HEAD(&priv->obj_list);
> @@ -753,6 +757,7 @@ static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
>   	drm_mode_config_cleanup(ddev);
>   	omap_gem_deinit(ddev);
>   	destroy_workqueue(priv->wq);
> +err_alloc_workqueue:
>   	omap_disconnect_pipelines(ddev);
>   	drm_dev_put(ddev);
>   	return ret;

Thanks, I'll pick this up to drm-misc.

  Tomi
diff mbox series

Patch

diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index 6598c9c08ba1..94a57f0d1c08 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -695,6 +695,10 @@  static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
 	soc = soc_device_match(omapdrm_soc_devices);
 	priv->omaprev = soc ? (uintptr_t)soc->data : 0;
 	priv->wq = alloc_ordered_workqueue("omapdrm", 0);
+	if (!priv->wq) {
+		ret = -ENOMEM;
+		goto err_alloc_workqueue;
+	}
 
 	mutex_init(&priv->list_lock);
 	INIT_LIST_HEAD(&priv->obj_list);
@@ -753,6 +757,7 @@  static int omapdrm_init(struct omap_drm_private *priv, struct device *dev)
 	drm_mode_config_cleanup(ddev);
 	omap_gem_deinit(ddev);
 	destroy_workqueue(priv->wq);
+err_alloc_workqueue:
 	omap_disconnect_pipelines(ddev);
 	drm_dev_put(ddev);
 	return ret;