From 2b91868a72d115dabd6085068a0571d5d146a651 Mon Sep 17 00:00:00 2001 From: "Isaac J. Manjarres" Date: Wed, 2 Sep 2020 13:48:25 -0700 Subject: [PATCH] soc: qcom: mem-buf: Fix memory leak in mem_buf_alloc() When mem_buf_alloc() encounters an error after mapping the memory in the stage-2 page tables of the VM, the SGL descriptor is not freed in the error handling path, so free it. Change-Id: I6e6fa296311575bb55cd0b9da7a138970e8b8e74 Signed-off-by: Isaac J. Manjarres --- drivers/soc/qcom/mem-buf.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/soc/qcom/mem-buf.c b/drivers/soc/qcom/mem-buf.c index 8bdc163bbcb9..2c9228f34155 100644 --- a/drivers/soc/qcom/mem-buf.c +++ b/drivers/soc/qcom/mem-buf.c @@ -1458,12 +1458,17 @@ void *mem_buf_alloc(struct mem_buf_allocation_data *alloc_data) return membuf; err_get_file: - if (mem_buf_remove_mem(membuf) < 0) + if (mem_buf_remove_mem(membuf) < 0) { + kfree(membuf->sgl_desc); goto err_mem_req; + } err_add_mem: - if (mem_buf_unmap_mem_s1(membuf->sgl_desc) < 0) + if (mem_buf_unmap_mem_s1(membuf->sgl_desc) < 0) { + kfree(membuf->sgl_desc); goto err_mem_req; + } err_map_mem_s1: + kfree(membuf->sgl_desc); if (mem_buf_unmap_mem_s2(membuf->memparcel_hdl) < 0) goto err_mem_req; err_map_mem_s2: