ion: fix a possible memory leak in ion_cma_allocate
The memory leak occurs when kmalloc() for info->table fails, info is freed
but info->cpu_addr allocation is left.
Fixes: eeeb940746de ("ion: add snapshot of ion support for MSM")
Bug: 130817249
Test: builds and boots
Change-Id: I7faf5be5129a46b2f874f4e3803470e5f5130a21
Reported-by: Mikael Magnusson <Mikael.Magnusson@sony.com>
Suggested-by: Mikael Magnusson <Mikael.Magnusson@sony.com>
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
diff --git a/drivers/staging/android/ion/ion_cma_heap.c b/drivers/staging/android/ion/ion_cma_heap.c
index dfb6d2f..8b45472 100644
--- a/drivers/staging/android/ion/ion_cma_heap.c
+++ b/drivers/staging/android/ion/ion_cma_heap.c
@@ -85,7 +85,7 @@
info->table = kmalloc(sizeof(struct sg_table), GFP_KERNEL);
if (!info->table)
- goto err;
+ goto free_mem;
info->is_cached = ION_IS_CACHED(flags);
@@ -97,6 +97,11 @@
dev_dbg(dev, "Allocate buffer %pK\n", buffer);
return 0;
+free_mem:
+ if (!ION_IS_CACHED(flags))
+ dma_free_writecombine(dev, len, info->cpu_addr, info->handle);
+ else
+ dma_free_nonconsistent(dev, len, info->cpu_addr, info->handle);
err:
kfree(info);
return ION_CMA_ALLOCATE_FAILED;