The vmw_prime_import_sg_table() function is expected to return error
pointers on error and not NULL.  Otherwise it leads to a NULL dereference
in the caller drm_gem_prime_import_dev().

Propagate the error code from vmw_bo_create().

Fixes: b32233acceff ("drm/vmwgfx: Fix prime import/export")
Signed-off-by: Dan Carpenter <[email protected]>
---
v2: Propagate the error code from vmw_bo_create() instead of hardcoding
    -ENOMEM.

 drivers/gpu/drm/vmwgfx/vmwgfx_gem.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gem.c 
b/drivers/gpu/drm/vmwgfx/vmwgfx_gem.c
index 39f8c46550c2..93a92ae625f8 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_gem.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gem.c
@@ -184,7 +184,7 @@ struct drm_gem_object *vmw_prime_import_sg_table(struct 
drm_device *dev,
 {
        int ret;
        struct vmw_private *dev_priv = vmw_priv(dev);
-       struct drm_gem_object *gem = NULL;
+       struct drm_gem_object *gem;
        struct vmw_bo *vbo;
        struct vmw_bo_params params = {
                .domain = (dev_priv->has_mob) ? VMW_BO_DOMAIN_SYS : 
VMW_BO_DOMAIN_VRAM,
@@ -201,8 +201,10 @@ struct drm_gem_object *vmw_prime_import_sg_table(struct 
drm_device *dev,
        dma_resv_lock(params.resv, NULL);
 
        ret = vmw_bo_create(dev_priv, &params, &vbo);
-       if (ret != 0)
+       if (ret != 0) {
+               gem = ERR_PTR(ret);
                goto out_no_bo;
+       }
 
        vbo->tbo.base.funcs = &vmw_gem_object_funcs;
 
-- 
2.53.0

Reply via email to