drm: omapdrm: Add missing check for alloc_ordered_workqueue
authorMa Ke <make24@iscas.ac.cn>
Thu, 8 Aug 2024 06:13:36 +0000 (14:13 +0800)
committerTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Mon, 26 Aug 2024 09:47:04 +0000 (12:47 +0300)
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>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240808061336.2796729-1-make24@iscas.ac.cn
drivers/gpu/drm/omapdrm/omap_drv.c

index 6598c9c08ba11e6779606f59d01675303682a2d0..d3eac4817d76870d8fda064271a47a0be9815e1f 100644 (file)
@@ -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 @@ err_gem_deinit:
        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;