| From 1e2d1658e3fd3f09ccbbdf6060ab4ed8480c29b5 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 21 Jan 2022 15:46:23 -0500 |
| Subject: drm/amd/amdgpu/amdgpu_cs: fix refcount leak of a dma_fence obj |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Xin Xiong <xiongx18@fudan.edu.cn> |
| |
| [ Upstream commit dfced44f122c500004a48ecc8db516bb6a295a1b ] |
| |
| This issue takes place in an error path in |
| amdgpu_cs_fence_to_handle_ioctl(). When `info->in.what` falls into |
| default case, the function simply returns -EINVAL, forgetting to |
| decrement the reference count of a dma_fence obj, which is bumped |
| earlier by amdgpu_cs_get_fence(). This may result in reference count |
| leaks. |
| |
| Fix it by decreasing the refcount of specific object before returning |
| the error code. |
| |
| Reviewed-by: Christian Kรถnig <christian.koenig@amd.com> |
| Signed-off-by: Xin Xiong <xiongx18@fudan.edu.cn> |
| Signed-off-by: Xin Tan <tanxin.ctf@gmail.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c |
| index 0311d799a010..894869789041 100644 |
| --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c |
| @@ -1510,6 +1510,7 @@ int amdgpu_cs_fence_to_handle_ioctl(struct drm_device *dev, void *data, |
| return 0; |
| |
| default: |
| + dma_fence_put(fence); |
| return -EINVAL; |
| } |
| } |
| -- |
| 2.35.1 |
| |