diff options
| author | Yajun Li <yajunl@codeaurora.org> | 2018-09-18 14:24:24 +0800 |
|---|---|---|
| committer | Yajun Li <yajunl@codeaurora.org> | 2018-09-21 17:25:46 +0800 |
| commit | 35669d769850e635254ea473fb4964729ff4b979 (patch) | |
| tree | 841a0af7212311b1b9a2aa48e24fce2a9667a754 | |
| parent | 727593cbf7ebb6782b2b3b45a951cc8ccc03a788 (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.c | 18 |
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; } |
