Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b7b6f05 authored by Carter Cooper's avatar Carter Cooper
Browse files

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: default avatarCarter Cooper <ccooper@codeaurora.org>
parent 387bc4e1
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -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);
	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;
}

+5 −2
Original line number Diff line number Diff line
@@ -435,12 +435,15 @@ static inline void kgsl_schedule_work(struct work_struct *work)
static inline int
kgsl_mem_entry_get(struct kgsl_mem_entry *entry)
{
	if (entry)
		return kref_get_unless_zero(&entry->refcount);
	return 0;
}

static inline void
kgsl_mem_entry_put(struct kgsl_mem_entry *entry)
{
	if (entry)
		kref_put(&entry->refcount, kgsl_mem_entry_destroy);
}