| From 484aafadc4113702c51e7300ffdacd6929a2dc70 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 26 Nov 2021 18:43:09 -0500 |
| Subject: drm/amdkfd: fix double free mem structure |
| |
| From: Philip Yang <Philip.Yang@amd.com> |
| |
| [ Upstream commit 494f2e42ce4a9ddffb5d8c5b2db816425ef90397 ] |
| |
| drm_gem_object_put calls release_notify callback to free the mem |
| structure and unreserve_mem_limit, move it down after the last access |
| of mem and make it conditional call. |
| |
| Signed-off-by: Philip Yang <Philip.Yang@amd.com> |
| Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 8 +++++--- |
| 1 file changed, 5 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c |
| index cdf46bd0d8d5b..ab36cce59d2e4 100644 |
| --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c |
| @@ -1393,7 +1393,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( |
| struct sg_table *sg = NULL; |
| uint64_t user_addr = 0; |
| struct amdgpu_bo *bo; |
| - struct drm_gem_object *gobj; |
| + struct drm_gem_object *gobj = NULL; |
| u32 domain, alloc_domain; |
| u64 alloc_flags; |
| int ret; |
| @@ -1503,14 +1503,16 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( |
| remove_kgd_mem_from_kfd_bo_list(*mem, avm->process_info); |
| drm_vma_node_revoke(&gobj->vma_node, drm_priv); |
| err_node_allow: |
| - drm_gem_object_put(gobj); |
| /* Don't unreserve system mem limit twice */ |
| goto err_reserve_limit; |
| err_bo_create: |
| unreserve_mem_limit(adev, size, alloc_domain, !!sg); |
| err_reserve_limit: |
| mutex_destroy(&(*mem)->lock); |
| - kfree(*mem); |
| + if (gobj) |
| + drm_gem_object_put(gobj); |
| + else |
| + kfree(*mem); |
| err: |
| if (sg) { |
| sg_free_table(sg); |
| -- |
| 2.33.0 |
| |