summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2015-08-27 02:47:07 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2015-09-30 14:10:17 -0400
commit5b4451cad8875f5d72490db0f8e6776e506f720a (patch)
tree3e25f5e0924d25ab1bd9344eea3ba184193dd306 /drivers
parentdab594ac13e5ca76d09a9ab383c35ad67c1444ef (diff)
gpu: nvgpu: prevent extra user unmaps
It is possible that user space requests more unmaps on a buffer than it requested maps In this case, we end up dropping one extra refcount which could lead to releasing buffer early Fix this by checking and returning if buffer's user_mapped refcount is already zero Bug 200130521 Change-Id: Ic8ef2dbfe0476b16d852ad899b1ed0404b5bb7de Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/788904 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
index 2e26ff44..b0c864d4 100644
--- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
@@ -873,6 +873,12 @@ static void gk20a_vm_unmap_user(struct vm_gk20a *vm, u64 offset,
873 mutex_lock(&vm->update_gmmu_lock); 873 mutex_lock(&vm->update_gmmu_lock);
874 } 874 }
875 875
876 if (mapped_buffer->user_mapped == 0) {
877 mutex_unlock(&vm->update_gmmu_lock);
878 gk20a_err(d, "addr already unmapped from user 0x%llx", offset);
879 return;
880 }
881
876 mapped_buffer->user_mapped--; 882 mapped_buffer->user_mapped--;
877 if (mapped_buffer->user_mapped == 0) 883 if (mapped_buffer->user_mapped == 0)
878 vm->num_user_mapped_buffers--; 884 vm->num_user_mapped_buffers--;