drm/rockchip: Fix type promotion bug in rockchip_gem_iommu_map()
authorDan Carpenter <dan.carpenter@linaro.org>
Wed, 11 Oct 2023 08:01:48 +0000 (11:01 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Nov 2023 10:59:12 +0000 (11:59 +0100)
[ Upstream commit 6471da5ee311d53ef46eebcb7725bc94266cc0cf ]

The "ret" variable is declared as ssize_t and it can hold negative error
codes but the "rk_obj->base.size" variable is type size_t.  This means
that when we compare them, they are both type promoted to size_t and the
negative error code becomes a high unsigned value and is treated as
success.  Add a cast to fix this.

Fixes: 38f993b7c59e ("drm/rockchip: Do not use DMA mapping API if attached to IOMMU domain")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://patchwork.freedesktop.org/patch/msgid/2bfa28b5-145d-4b9e-a18a-98819dd686ce@moroto.mountain
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/rockchip/rockchip_drm_gem.c

index b8f8b45ebf59406d671fc6f480df54471846dc97..93ed841f5dceae79cb335e456735e92fbab93b29 100644 (file)
@@ -40,7 +40,7 @@ static int rockchip_gem_iommu_map(struct rockchip_gem_object *rk_obj)
 
        ret = iommu_map_sgtable(private->domain, rk_obj->dma_addr, rk_obj->sgt,
                                prot);
-       if (ret < rk_obj->base.size) {
+       if (ret < (ssize_t)rk_obj->base.size) {
                DRM_ERROR("failed to map buffer: size=%zd request_size=%zd\n",
                          ret, rk_obj->base.size);
                ret = -ENOMEM;