diff options
| author | Carter Cooper <ccooper@codeaurora.org> | 2015-09-17 12:02:47 -0600 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 21:13:40 -0700 |
| commit | 6eb6712708eedb23af89bcbd204f66c8a217c4b1 (patch) | |
| tree | 5da9ad34c49f656e62cd78ee55bdd487eae5f5e9 /drivers/gpu | |
| parent | 048fc95836a4fd0509a5a378b59b24bffb7c3b6c (diff) | |
msm: kgsl: Verify the pointer isn't NULL before using it for kref
Probably overkill, but ensure that the struct pointer we are going
to dereference to send into kref calls is valid before we dereference.
Change-Id: I308176df9f7476a2a9f1357612381a93160ad698
Signed-off-by: Carter Cooper <ccooper@codeaurora.org>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/msm/kgsl.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/msm/kgsl.h | 7 |
2 files changed, 10 insertions, 10 deletions
diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c index c820c9ca7a3a..10e139a9b00f 100644 --- a/drivers/gpu/msm/kgsl.c +++ b/drivers/gpu/msm/kgsl.c @@ -1243,9 +1243,6 @@ kgsl_sharedmem_find(struct kgsl_process_private *private, uint64_t gpuaddr) spin_lock(&private->mem_lock); idr_for_each_entry(&private->mem_idr, entry, id) { - if (entry == NULL) - continue; - if (GPUADDR_IN_MEMDESC(gpuaddr, &entry->memdesc)) { ret = kgsl_mem_entry_get(entry); break; @@ -1270,18 +1267,17 @@ EXPORT_SYMBOL(kgsl_sharedmem_find); struct kgsl_mem_entry * __must_check kgsl_sharedmem_find_id(struct kgsl_process_private *process, unsigned int id) { - int result = 0; + int result; struct kgsl_mem_entry *entry; drain_workqueue(kgsl_driver.mem_workqueue); spin_lock(&process->mem_lock); entry = idr_find(&process->mem_idr, id); - if (entry) - result = kgsl_mem_entry_get(entry); + result = kgsl_mem_entry_get(entry); spin_unlock(&process->mem_lock); - if (!result) + if (result == 0) return NULL; return entry; } @@ -3309,7 +3305,8 @@ kgsl_mmap_memstore(struct kgsl_device *device, struct vm_area_struct *vma) static void kgsl_gpumem_vm_open(struct vm_area_struct *vma) { struct kgsl_mem_entry *entry = vma->vm_private_data; - if (!kgsl_mem_entry_get(entry)) + + if (kgsl_mem_entry_get(entry) == 0) vma->vm_private_data = NULL; } diff --git a/drivers/gpu/msm/kgsl.h b/drivers/gpu/msm/kgsl.h index b8bc155cd335..bc0ae2bac915 100644 --- a/drivers/gpu/msm/kgsl.h +++ b/drivers/gpu/msm/kgsl.h @@ -435,13 +435,16 @@ static inline void kgsl_schedule_work(struct work_struct *work) static inline int kgsl_mem_entry_get(struct kgsl_mem_entry *entry) { - return kref_get_unless_zero(&entry->refcount); + if (entry) + return kref_get_unless_zero(&entry->refcount); + return 0; } static inline void kgsl_mem_entry_put(struct kgsl_mem_entry *entry) { - kref_put(&entry->refcount, kgsl_mem_entry_destroy); + if (entry) + kref_put(&entry->refcount, kgsl_mem_entry_destroy); } /** |
