Loading drivers/misc/qseecom.c +41 −10 Original line number Diff line number Diff line Loading @@ -190,6 +190,13 @@ struct sglist_info { #define MAKE_WHITELIST_VERSION(major, minor, patch) \ (((major & 0x3FF) << 22) | ((minor & 0x3FF) << 12) | (patch & 0xFFF)) #define MAKE_NULL(sgt, attach, dmabuf) do {\ sgt = NULL;\ attach = NULL;\ dmabuf = NULL;\ } while (0) struct qseecom_registered_listener_list { struct list_head list; struct qseecom_register_listener_req svc; Loading Loading @@ -1432,6 +1439,7 @@ static int qseecom_vaddr_map(int ion_fd, err_unmap: dma_buf_end_cpu_access(new_dma_buf, DMA_BIDIRECTIONAL); qseecom_dmabuf_unmap(new_sgt, new_attach, new_dma_buf); MAKE_NULL(*sgt, *attach, *dmabuf); err: return ret; } Loading Loading @@ -1508,9 +1516,11 @@ static int __qseecom_set_sb_memory(struct qseecom_registered_listener_list *svc, } return 0; err: if (svc->dmabuf) if (svc->dmabuf) { qseecom_vaddr_unmap(svc->sb_virt, svc->sgt, svc->attach, svc->dmabuf); MAKE_NULL(svc->sgt, svc->attach, svc->dmabuf); } return ret; } Loading Loading @@ -1636,9 +1646,11 @@ static int __qseecom_unregister_listener(struct qseecom_dev_handle *data, } exit: if (ptr_svc->dmabuf) if (ptr_svc->dmabuf) { qseecom_vaddr_unmap(ptr_svc->sb_virt, ptr_svc->sgt, ptr_svc->attach, ptr_svc->dmabuf); MAKE_NULL(ptr_svc->sgt, ptr_svc->attach, ptr_svc->dmabuf); } __qseecom_free_tzbuf(&ptr_svc->sglistinfo_shm); list_del(&ptr_svc->list); kzfree(ptr_svc); Loading Loading @@ -2049,9 +2061,12 @@ static int qseecom_set_client_mem_param(struct qseecom_dev_handle *data, return ret; exit: if (data->client.dmabuf) if (data->client.dmabuf) { qseecom_vaddr_unmap(data->client.sb_virt, data->client.sgt, data->client.attach, data->client.dmabuf); MAKE_NULL(data->client.sgt, data->client.attach, data->client.dmabuf); } return ret; } Loading Loading @@ -2992,8 +3007,10 @@ static int qseecom_load_app(struct qseecom_dev_handle *data, void __user *argp) } loadapp_err: if (dmabuf) if (dmabuf) { qseecom_vaddr_unmap(vaddr, sgt, attach, dmabuf); MAKE_NULL(sgt, attach, dmabuf); } checkapp_err: __qseecom_disable_clk_scale_down(data); enable_clk_err: Loading Loading @@ -3129,9 +3146,12 @@ static int qseecom_unload_app(struct qseecom_dev_handle *data, } unload_exit: if (data->client.dmabuf) if (data->client.dmabuf) { qseecom_vaddr_unmap(data->client.sb_virt, data->client.sgt, data->client.attach, data->client.dmabuf); MAKE_NULL(data->client.sgt, data->client.attach, data->client.dmabuf); } data->released = true; return ret; } Loading Loading @@ -4063,8 +4083,10 @@ static int __qseecom_update_cmd_buf(void *msg, bool cleanup, } return ret; err: if (!IS_ERR_OR_NULL(sg_ptr)) if (!IS_ERR_OR_NULL(sg_ptr)) { qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf); MAKE_NULL(sg_ptr, attach, dmabuf); } return -ENOMEM; } Loading Loading @@ -4301,8 +4323,10 @@ static int __qseecom_update_cmd_buf_64(void *msg, bool cleanup, data->client.sec_buf_fd[i].size, data->client.sec_buf_fd[i].vbase, data->client.sec_buf_fd[i].pbase); if (!IS_ERR_OR_NULL(sg_ptr)) if (!IS_ERR_OR_NULL(sg_ptr)) { qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf); MAKE_NULL(sg_ptr, attach, dmabuf); } return -ENOMEM; } Loading Loading @@ -5867,8 +5891,10 @@ static int qseecom_load_external_elf(struct qseecom_dev_handle *data, } exit_cpu_restore: if (dmabuf) if (dmabuf) { qseecom_vaddr_unmap(va, sgt, attach, dmabuf); MAKE_NULL(sgt, attach, dmabuf); } return ret; } Loading Loading @@ -7122,8 +7148,10 @@ static int __qseecom_update_qteec_req_buf(struct qseecom_qteec_modfd_req *req, } return ret; err: if (!IS_ERR_OR_NULL(sg_ptr)) if (!IS_ERR_OR_NULL(sg_ptr)) { qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf); MAKE_NULL(sg_ptr, attach, dmabuf); } return -ENOMEM; } Loading Loading @@ -8314,10 +8342,13 @@ static int qseecom_release(struct inode *inode, struct file *file) break; case QSEECOM_SECURE_SERVICE: case QSEECOM_GENERIC: if (data->client.dmabuf) if (data->client.dmabuf) { qseecom_vaddr_unmap(data->client.sb_virt, data->client.sgt, data->client.attach, data->client.dmabuf); MAKE_NULL(data->client.sgt, data->client.attach, data->client.dmabuf); } break; case QSEECOM_UNAVAILABLE_CLIENT_APP: break; Loading Loading
drivers/misc/qseecom.c +41 −10 Original line number Diff line number Diff line Loading @@ -190,6 +190,13 @@ struct sglist_info { #define MAKE_WHITELIST_VERSION(major, minor, patch) \ (((major & 0x3FF) << 22) | ((minor & 0x3FF) << 12) | (patch & 0xFFF)) #define MAKE_NULL(sgt, attach, dmabuf) do {\ sgt = NULL;\ attach = NULL;\ dmabuf = NULL;\ } while (0) struct qseecom_registered_listener_list { struct list_head list; struct qseecom_register_listener_req svc; Loading Loading @@ -1432,6 +1439,7 @@ static int qseecom_vaddr_map(int ion_fd, err_unmap: dma_buf_end_cpu_access(new_dma_buf, DMA_BIDIRECTIONAL); qseecom_dmabuf_unmap(new_sgt, new_attach, new_dma_buf); MAKE_NULL(*sgt, *attach, *dmabuf); err: return ret; } Loading Loading @@ -1508,9 +1516,11 @@ static int __qseecom_set_sb_memory(struct qseecom_registered_listener_list *svc, } return 0; err: if (svc->dmabuf) if (svc->dmabuf) { qseecom_vaddr_unmap(svc->sb_virt, svc->sgt, svc->attach, svc->dmabuf); MAKE_NULL(svc->sgt, svc->attach, svc->dmabuf); } return ret; } Loading Loading @@ -1636,9 +1646,11 @@ static int __qseecom_unregister_listener(struct qseecom_dev_handle *data, } exit: if (ptr_svc->dmabuf) if (ptr_svc->dmabuf) { qseecom_vaddr_unmap(ptr_svc->sb_virt, ptr_svc->sgt, ptr_svc->attach, ptr_svc->dmabuf); MAKE_NULL(ptr_svc->sgt, ptr_svc->attach, ptr_svc->dmabuf); } __qseecom_free_tzbuf(&ptr_svc->sglistinfo_shm); list_del(&ptr_svc->list); kzfree(ptr_svc); Loading Loading @@ -2049,9 +2061,12 @@ static int qseecom_set_client_mem_param(struct qseecom_dev_handle *data, return ret; exit: if (data->client.dmabuf) if (data->client.dmabuf) { qseecom_vaddr_unmap(data->client.sb_virt, data->client.sgt, data->client.attach, data->client.dmabuf); MAKE_NULL(data->client.sgt, data->client.attach, data->client.dmabuf); } return ret; } Loading Loading @@ -2992,8 +3007,10 @@ static int qseecom_load_app(struct qseecom_dev_handle *data, void __user *argp) } loadapp_err: if (dmabuf) if (dmabuf) { qseecom_vaddr_unmap(vaddr, sgt, attach, dmabuf); MAKE_NULL(sgt, attach, dmabuf); } checkapp_err: __qseecom_disable_clk_scale_down(data); enable_clk_err: Loading Loading @@ -3129,9 +3146,12 @@ static int qseecom_unload_app(struct qseecom_dev_handle *data, } unload_exit: if (data->client.dmabuf) if (data->client.dmabuf) { qseecom_vaddr_unmap(data->client.sb_virt, data->client.sgt, data->client.attach, data->client.dmabuf); MAKE_NULL(data->client.sgt, data->client.attach, data->client.dmabuf); } data->released = true; return ret; } Loading Loading @@ -4063,8 +4083,10 @@ static int __qseecom_update_cmd_buf(void *msg, bool cleanup, } return ret; err: if (!IS_ERR_OR_NULL(sg_ptr)) if (!IS_ERR_OR_NULL(sg_ptr)) { qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf); MAKE_NULL(sg_ptr, attach, dmabuf); } return -ENOMEM; } Loading Loading @@ -4301,8 +4323,10 @@ static int __qseecom_update_cmd_buf_64(void *msg, bool cleanup, data->client.sec_buf_fd[i].size, data->client.sec_buf_fd[i].vbase, data->client.sec_buf_fd[i].pbase); if (!IS_ERR_OR_NULL(sg_ptr)) if (!IS_ERR_OR_NULL(sg_ptr)) { qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf); MAKE_NULL(sg_ptr, attach, dmabuf); } return -ENOMEM; } Loading Loading @@ -5867,8 +5891,10 @@ static int qseecom_load_external_elf(struct qseecom_dev_handle *data, } exit_cpu_restore: if (dmabuf) if (dmabuf) { qseecom_vaddr_unmap(va, sgt, attach, dmabuf); MAKE_NULL(sgt, attach, dmabuf); } return ret; } Loading Loading @@ -7122,8 +7148,10 @@ static int __qseecom_update_qteec_req_buf(struct qseecom_qteec_modfd_req *req, } return ret; err: if (!IS_ERR_OR_NULL(sg_ptr)) if (!IS_ERR_OR_NULL(sg_ptr)) { qseecom_dmabuf_unmap(sg_ptr, attach, dmabuf); MAKE_NULL(sg_ptr, attach, dmabuf); } return -ENOMEM; } Loading Loading @@ -8314,10 +8342,13 @@ static int qseecom_release(struct inode *inode, struct file *file) break; case QSEECOM_SECURE_SERVICE: case QSEECOM_GENERIC: if (data->client.dmabuf) if (data->client.dmabuf) { qseecom_vaddr_unmap(data->client.sb_virt, data->client.sgt, data->client.attach, data->client.dmabuf); MAKE_NULL(data->client.sgt, data->client.attach, data->client.dmabuf); } break; case QSEECOM_UNAVAILABLE_CLIENT_APP: break; Loading