summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2018-08-30 04:35:25 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-09-06 19:12:13 -0400
commiteb473aa0b1ad2a65195950907438a0de6e53d527 (patch)
tree0eb0858a7fa84f7785031e8d202e680103291c8a /drivers/gpu/nvgpu/common
parentbc1ea8c9bfdd8614af3f282a52cbb1b74c4d9544 (diff)
gpu: nvgpu: fix crash with uninitialized comptag allocator
If gk20a_comptaglines_alloc() is called with an uninitialized comptag allocator we right now see a kernel panic like this [ 445.097931] [<ffffff8008fdd650>] __mutex_lock_slowpath+0xe0/0x188 [ 445.104275] [<ffffff8008fdd748>] mutex_lock+0x50/0x68 [ 445.109773] [<ffffff80012ef340>] gk20a_comptaglines_alloc+0x30/0x98 [nvgpu] [ 445.117169] [<ffffff80012e0fdc>] gk20a_alloc_or_get_comptags+0xe4/0x140 [nvgpu] [ 445.124910] [<ffffff80012ee1cc>] nvgpu_vm_map+0x414/0x7b8 [nvgpu] [ 445.131433] [<ffffff80012dd754>] nvgpu_vm_map_linux+0x114/0x1e8 [nvgpu] [ 445.138475] [<ffffff80012dd978>] nvgpu_vm_map_buffer+0x150/0x238 [nvgpu] [ 445.145605] [<ffffff80012d2834>] gk20a_as_dev_ioctl+0x30c/0xa78 [nvgpu] [ 445.152473] [<ffffff8008262154>] do_vfs_ioctl+0xc4/0x8f8 Fix this by checking explicitly that comptag allocator is initialized in gk20a_comptaglines_alloc() and gk20a_comptaglines_free() Bug 2171567 Change-Id: Iaac6d77e40a8aaa01f2bacbe0cb54ec447100075 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1805170 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/common')
-rw-r--r--drivers/gpu/nvgpu/common/mm/comptags.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/common/mm/comptags.c b/drivers/gpu/nvgpu/common/mm/comptags.c
index 334236ec..3bde3a53 100644
--- a/drivers/gpu/nvgpu/common/mm/comptags.c
+++ b/drivers/gpu/nvgpu/common/mm/comptags.c
@@ -32,6 +32,10 @@ int gk20a_comptaglines_alloc(struct gk20a_comptag_allocator *allocator,
32 unsigned long addr; 32 unsigned long addr;
33 int err = 0; 33 int err = 0;
34 34
35 if (allocator->size == 0UL) {
36 return -EINVAL;
37 }
38
35 nvgpu_mutex_acquire(&allocator->lock); 39 nvgpu_mutex_acquire(&allocator->lock);
36 addr = bitmap_find_next_zero_area(allocator->bitmap, allocator->size, 40 addr = bitmap_find_next_zero_area(allocator->bitmap, allocator->size,
37 0, len, 0); 41 0, len, 0);
@@ -53,6 +57,10 @@ void gk20a_comptaglines_free(struct gk20a_comptag_allocator *allocator,
53 /* number zero is reserved; bitmap base is 1 */ 57 /* number zero is reserved; bitmap base is 1 */
54 u32 addr = offset - 1U; 58 u32 addr = offset - 1U;
55 59
60 if (allocator->size == 0UL) {
61 return;
62 }
63
56 WARN_ON(offset == 0U); 64 WARN_ON(offset == 0U);
57 WARN_ON(addr > allocator->size); 65 WARN_ON(addr > allocator->size);
58 WARN_ON(addr + len > allocator->size); 66 WARN_ON(addr + len > allocator->size);