drm/exynos: fix a wrong error checking
authorInki Dae <inki.dae@samsung.com>
Wed, 1 Nov 2023 09:36:51 +0000 (18:36 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 20 Jan 2024 10:51:42 +0000 (11:51 +0100)
[ Upstream commit 8d1b7809684c688005706125b804e1f9792d2b1b ]

Fix a wrong error checking in exynos_drm_dma.c module.

In the exynos_drm_register_dma function, both arm_iommu_create_mapping()
and iommu_get_domain_for_dev() functions are expected to return NULL as
an error.

However, the error checking is performed using the statement
if(IS_ERR(mapping)), which doesn't provide a suitable error value.
So check if 'mapping' is NULL, and if it is, return -ENODEV.

This issue[1] was reported by Dan.

Changelog v1:
- fix build warning.

[1] https://lore.kernel.org/all/33e52277-1349-472b-a55b-ab5c3462bfcf@moroto.mountain/

Reported-by : Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/exynos/exynos_drm_dma.c

index a971590..e2c7373 100644 (file)
@@ -107,18 +107,16 @@ int exynos_drm_register_dma(struct drm_device *drm, struct device *dev,
                return 0;
 
        if (!priv->mapping) {
-               void *mapping;
+               void *mapping = NULL;
 
                if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU))
                        mapping = arm_iommu_create_mapping(&platform_bus_type,
                                EXYNOS_DEV_ADDR_START, EXYNOS_DEV_ADDR_SIZE);
                else if (IS_ENABLED(CONFIG_IOMMU_DMA))
                        mapping = iommu_get_domain_for_dev(priv->dma_dev);
-               else
-                       mapping = ERR_PTR(-ENODEV);
 
-               if (IS_ERR(mapping))
-                       return PTR_ERR(mapping);
+               if (!mapping)
+                       return -ENODEV;
                priv->mapping = mapping;
        }