summaryrefslogtreecommitdiff
path: root/drivers/soc/qcom/hab
diff options
context:
space:
mode:
authorYong Ding <yongding@codeaurora.org>2018-07-12 13:35:43 +0800
committerYong Ding <yongding@codeaurora.org>2018-07-12 14:57:44 +0800
commita16a7501c86c5b545d369d7a0316f7af08207009 (patch)
tree5c9f7c86bacd896c60f8560aeddd7f3945ec1a48 /drivers/soc/qcom/hab
parentcd536e63e3c31501d321b5267930cd10ac2b5e37 (diff)
soc: qcom: hab: resolve NULL pointer dereference issues
Some NULL pointer dereference issues are fixed. Change-Id: I0f7f8ede860c81d451f2105520750692fd4eee50 Signed-off-by: Yong Ding <yongding@codeaurora.org>
Diffstat (limited to 'drivers/soc/qcom/hab')
-rw-r--r--drivers/soc/qcom/hab/hab_mem_linux.c21
-rw-r--r--drivers/soc/qcom/hab/hab_mimex.c3
2 files changed, 13 insertions, 11 deletions
diff --git a/drivers/soc/qcom/hab/hab_mem_linux.c b/drivers/soc/qcom/hab/hab_mem_linux.c
index 74ee88a037af..e9e42554cbe2 100644
--- a/drivers/soc/qcom/hab/hab_mem_linux.c
+++ b/drivers/soc/qcom/hab/hab_mem_linux.c
@@ -361,18 +361,19 @@ static int hab_map_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
{
struct page *page;
struct pages_list *pglist;
-
- unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
-
- /* PHY address */
- unsigned long fault_offset =
- (unsigned long)vmf->virtual_address - vma->vm_start + offset;
- unsigned long fault_index = fault_offset>>PAGE_SHIFT;
+ unsigned long offset, fault_offset, fault_index;
int page_idx;
if (vma == NULL)
return VM_FAULT_SIGBUS;
+ offset = vma->vm_pgoff << PAGE_SHIFT;
+
+ /* PHY address */
+ fault_offset =
+ (unsigned long)vmf->virtual_address - vma->vm_start + offset;
+ fault_index = fault_offset>>PAGE_SHIFT;
+
pglist = vma->vm_private_data;
page_idx = fault_index - pglist->index;
@@ -463,6 +464,7 @@ static int habmem_imp_hyp_map_fd(void *imp_ctx,
int i, j, k = 0;
pgprot_t prot = PAGE_KERNEL;
int32_t fd, size;
+ int ret;
DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
if (!pfn_table || !priv)
@@ -505,9 +507,10 @@ static int habmem_imp_hyp_map_fd(void *imp_ctx,
exp_info.priv = pglist;
pglist->dmabuf = dma_buf_export(&exp_info);
if (IS_ERR(pglist->dmabuf)) {
+ ret = PTR_ERR(pglist->dmabuf);
kfree(pages);
kfree(pglist);
- return PTR_ERR(pglist->dmabuf);
+ return ret;
}
fd = dma_buf_fd(pglist->dmabuf, O_CLOEXEC);
@@ -579,8 +582,8 @@ static int habmem_imp_hyp_map_kva(void *imp_ctx,
pglist->kva = vmap(pglist->pages, pglist->npages, VM_MAP, prot);
if (pglist->kva == NULL) {
kfree(pages);
- kfree(pglist);
pr_err("%ld pages vmap failed\n", pglist->npages);
+ kfree(pglist);
return -ENOMEM;
}
diff --git a/drivers/soc/qcom/hab/hab_mimex.c b/drivers/soc/qcom/hab/hab_mimex.c
index 86d763f65657..c0a663d544e0 100644
--- a/drivers/soc/qcom/hab/hab_mimex.c
+++ b/drivers/soc/qcom/hab/hab_mimex.c
@@ -124,8 +124,7 @@ void habmem_remove_export(struct export_desc *exp)
struct uhab_context *ctx;
if (!exp || !exp->ctx || !exp->pchan) {
- pr_err("failed to find valid info in exp %pK ctx %pK pchan %pK\n",
- exp, exp->ctx, exp->pchan);
+ pr_err("failed to find valid info in exp %pK\n", exp);
return;
}