summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYajun Li <yajunl@codeaurora.org>2018-09-18 14:24:24 +0800
committerYajun Li <yajunl@codeaurora.org>2018-09-21 17:25:46 +0800
commit35669d769850e635254ea473fb4964729ff4b979 (patch)
tree841a0af7212311b1b9a2aa48e24fce2a9667a754
parent727593cbf7ebb6782b2b3b45a951cc8ccc03a788 (diff)
soc: hab: add more return error checking
If the exported buffer has been freed in other threads, dma_buf_get maybe return error, therefore need error checking here. Change-Id: Ic1674cada8dc6e0d6b09d75abf695a68896b8bff Signed-off-by: Yajun Li <yajunl@codeaurora.org>
-rw-r--r--drivers/soc/qcom/hab/hab_mem_linux.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/soc/qcom/hab/hab_mem_linux.c b/drivers/soc/qcom/hab/hab_mem_linux.c
index da41536205a5..428d3e7cee60 100644
--- a/drivers/soc/qcom/hab/hab_mem_linux.c
+++ b/drivers/soc/qcom/hab/hab_mem_linux.c
@@ -79,6 +79,7 @@ static int habmem_get_dma_pages_from_va(unsigned long address,
vma = find_vma(current->mm, address);
if (!vma || !vma->vm_file) {
pr_err("cannot find vma\n");
+ rc = -EBADF;
goto err;
}
@@ -86,6 +87,7 @@ static int habmem_get_dma_pages_from_va(unsigned long address,
fd = iterate_fd(current->files, 0, match_file, vma->vm_file);
if (fd == 0) {
pr_err("iterate_fd failed\n");
+ rc = -EBADF;
goto err;
}
@@ -93,10 +95,16 @@ static int habmem_get_dma_pages_from_va(unsigned long address,
page_offset = offset/PAGE_SIZE;
dmabuf = dma_buf_get(fd - 1);
+ if (IS_ERR_OR_NULL(dmabuf)) {
+ pr_err("dma_buf_get failed fd %d ret %pK\n", fd, dmabuf);
+ rc = -EBADF;
+ goto err;
+ }
attach = dma_buf_attach(dmabuf, hab_driver.dev);
if (IS_ERR_OR_NULL(attach)) {
pr_err("dma_buf_attach failed\n");
+ rc = -EBADF;
goto err;
}
@@ -104,6 +112,7 @@ static int habmem_get_dma_pages_from_va(unsigned long address,
if (IS_ERR_OR_NULL(sg_table)) {
pr_err("dma_buf_map_attachment failed\n");
+ rc = -EBADF;
goto err;
}
@@ -154,12 +163,16 @@ static int habmem_get_dma_pages_from_fd(int32_t fd,
int i, j, rc = 0;
dmabuf = dma_buf_get(fd);
- if (IS_ERR(dmabuf))
- return PTR_ERR(dmabuf);
+ if (IS_ERR_OR_NULL(dmabuf)) {
+ pr_err("dma_buf_get failed fd %d ret %pK\n", fd, dmabuf);
+ rc = -EBADF;
+ goto err;
+ }
attach = dma_buf_attach(dmabuf, hab_driver.dev);
if (IS_ERR_OR_NULL(attach)) {
pr_err("dma_buf_attach failed\n");
+ rc = -EBADF;
goto err;
}
@@ -167,6 +180,7 @@ static int habmem_get_dma_pages_from_fd(int32_t fd,
if (IS_ERR_OR_NULL(sg_table)) {
pr_err("dma_buf_map_attachment failed\n");
+ rc = -EBADF;
goto err;
}