From 232e1b0973c05d43f4200b38df518c0b1a77a702 Mon Sep 17 00:00:00 2001 From: suwanghw Date: Thu, 27 Jun 2024 10:34:19 +0800 Subject: [PATCH] Use unmap_sharemem to unmap shared memory and replace malloc_coherent with malloc Signed-off-by: suwanghw --- drivers/crypto_mgr/src/crypto_mgr.c | 2 +- framework/gtask/src/manager/mem_manager.c | 13 +++++++++---- lib/teelib/libtaentry/src/elf_main_entry.c | 16 ++++++++-------- lib/teelib/libteedynsrv/src/tee_dynamic_srv.c | 2 +- lib/teelib/libteemem/src/teemem_syscall.c | 8 ++++---- services/huk_service/src/huk_derive_takey.c | 2 +- .../permission_service/src/perm_srv_common.c | 2 +- .../secure_storage_agent/secure_storage_agent.c | 2 +- services/ssa/src/secure_storage_agent/sfs.c | 2 +- 9 files changed, 27 insertions(+), 22 deletions(-) diff --git a/drivers/crypto_mgr/src/crypto_mgr.c b/drivers/crypto_mgr/src/crypto_mgr.c index b820af11..587e3246 100644 --- a/drivers/crypto_mgr/src/crypto_mgr.c +++ b/drivers/crypto_mgr/src/crypto_mgr.c @@ -45,7 +45,7 @@ static int32_t crypto_ioctl_alloc_ctx_buf(struct drv_data *drv, uint32_t cmd, un tloge("Get ctx size failed, ctx size=%d\n", ctx_size); return CRYPTO_BAD_PARAMETERS; } - uint8_t *ctx_buffer = (uint8_t *)malloc_coherent((size_t)ctx_size); + uint8_t *ctx_buffer = (uint8_t *)malloc((size_t)ctx_size); if (ctx_buffer == NULL) { tloge("Malloc ctx buffer failed, ctx size=%d\n", ctx_size); return CRYPTO_OVERFLOW; diff --git a/framework/gtask/src/manager/mem_manager.c b/framework/gtask/src/manager/mem_manager.c index 62698864..84750656 100644 --- a/framework/gtask/src/manager/mem_manager.c +++ b/framework/gtask/src/manager/mem_manager.c @@ -455,7 +455,7 @@ static TEE_Result map_memref_for_gtask(bool ta2ta, const smc_cmd_t *cmd, tee_par p.memref.size, ta2ta); if (ret != TEE_SUCCESS) { tloge("failed to refcount the memory\n"); - if (munmap(*ree_addr, p.memref.size) != 0) + if (unmap_sharemem(*ree_addr, p.memref.size) != 0) tloge("munmap ree_addr failed\n"); return ret; } @@ -616,8 +616,13 @@ static TEE_Result map_cmd_to_operation(bool ta2ta, uint32_t *operation_size, con if (mapped) { ret = task_add_mem_region(cmd->event_nr, 0, (uint64_t)(uintptr_t)(*operation), *operation_size, ta2ta); if (ret != TEE_SUCCESS) { - if (munmap(*operation, *operation_size) != 0) - tloge("unmap operation failed\n"); + if (ta2ta) { + if (unmap_sharemem(*operation, *operation_size) != 0) + tloge("unmap sharemem operation failed\n"); + } else { + if (task_unmap(0, (uint64_t)*operation, *operation_size) != 0) + tloge("task unmap operation failed\n"); + } return ret; } } @@ -804,7 +809,7 @@ TEE_Result map_secure_operation(uint64_t tacmd, smc_cmd_t *out_cmd, uint32_t tas ret = TEE_ERROR_GENERIC; } - if (munmap(cmd, sizeof(smc_cmd_t)) != 0) + if (unmap_sharemem(cmd, sizeof(smc_cmd_t)) != 0) tloge("unmap cmd failed\n"); return ret; } diff --git a/lib/teelib/libtaentry/src/elf_main_entry.c b/lib/teelib/libtaentry/src/elf_main_entry.c index 9e1aaa67..891ae1db 100644 --- a/lib/teelib/libtaentry/src/elf_main_entry.c +++ b/lib/teelib/libtaentry/src/elf_main_entry.c @@ -479,15 +479,15 @@ static TEE_Result map_params(struct global_to_ta_msg *entry_msg, size_t *map_siz out: for (int i = 0; i < map_size_size; i++) { if (params_vaddrs[i] != 0) { - if (free_sharemem((void *)(uintptr_t)params_vaddrs[i], map_size[i]) != 0) - tloge("free sharemem param's vaddr failed\n"); + if (unmap_sharemem((void *)(uintptr_t)params_vaddrs[i], map_size[i]) != 0) + tloge("unmap sharemem param's vaddr failed\n"); map_addrs[i] = 0; } map_size[i] = 0; } - if ((vaddr != 0) && (free_sharemem((void *)(uintptr_t)vaddr, sizeof(TEE_Param) * map_addrs_size) != 0)) - tloge("free sharemem vaddr failed\n"); + if ((vaddr != 0) && (unmap_sharemem((void *)(uintptr_t)vaddr, sizeof(TEE_Param) * map_addrs_size) != 0)) + tloge("unmap sharemem vaddr failed\n"); return TEE_ERROR_GENERIC; } @@ -511,15 +511,15 @@ static void unmap_params(struct global_to_ta_msg *entry_msg, size_t *map_size, i * cannot use memref.size because it may be changed by TA * must use map_size[i] */ - if (free_sharemem((void *)(uintptr_t)map_addrs[i], map_size[i]) != 0) - tloge("free sharemem buffer failed\n"); + if (unmap_sharemem((void *)(uintptr_t)map_addrs[i], map_size[i]) != 0) + tloge("unmap sharemem buffer failed\n"); map_addrs[i] = 0; } map_size[i] = 0; } - if (free_sharemem(entry_msg->params, sizeof(TEE_Param) * map_addrs_size) != 0) - tloge("free sharemem params failed\n"); + if (unmap_sharemem(entry_msg->params, sizeof(TEE_Param) * map_addrs_size) != 0) + tloge("unmap sharemem params failed\n"); entry_msg->params = NULL; } diff --git a/lib/teelib/libteedynsrv/src/tee_dynamic_srv.c b/lib/teelib/libteedynsrv/src/tee_dynamic_srv.c index 333f18e5..8b57cded 100644 --- a/lib/teelib/libteedynsrv/src/tee_dynamic_srv.c +++ b/lib/teelib/libteedynsrv/src/tee_dynamic_srv.c @@ -85,7 +85,7 @@ void tee_srv_unmap_from_task(uint32_t va_addr, uint32_t size) (void)va_addr; (void)size; #else - (void)munmap((void *)(uintptr_t)va_addr, size); + (void)unmap_sharemem((void *)(uintptr_t)va_addr, size); #endif } diff --git a/lib/teelib/libteemem/src/teemem_syscall.c b/lib/teelib/libteemem/src/teemem_syscall.c index 5781b23d..5a87997d 100644 --- a/lib/teelib/libteemem/src/teemem_syscall.c +++ b/lib/teelib/libteemem/src/teemem_syscall.c @@ -57,12 +57,12 @@ int32_t copy_from_sharemem(uint32_t src_task, uint64_t src, uint32_t src_size, u ret = memcpy_s((void *)dst, dst_size, (void *)(uintptr_t)temp_dst, src_size); if (ret != EOK) { tloge("copy buffer from sharemem failed\n"); - if (munmap((void *)(uintptr_t)temp_dst, src_size) != 0) + if (unmap_sharemem((void *)(uintptr_t)temp_dst, src_size) != 0) tloge("unmap temp dst failed in from sharemem\n"); return -1; } - if (munmap((void *)(uintptr_t)temp_dst, src_size) != 0) { + if (unmap_sharemem((void *)(uintptr_t)temp_dst, src_size) != 0) { tloge("something wrong, unmap temp dst failed in from sharemem\n"); return -1; } @@ -88,12 +88,12 @@ int32_t copy_to_sharemem(uintptr_t src, uint32_t src_size, uint32_t dst_task, ui ret = memcpy_s((void *)(uintptr_t)temp_dst, dst_size, (void *)src, src_size); if (ret != EOK) { tloge("copy buffer to sharemem failed\n"); - if (munmap((void *)(uintptr_t)temp_dst, dst_size) != 0) + if (unmap_sharemem((void *)(uintptr_t)temp_dst, dst_size) != 0) tloge("unmap temp dst failed in to sharemem\n"); return -1; } - if (munmap((void *)(uintptr_t)temp_dst, dst_size) != 0) { + if (unmap_sharemem((void *)(uintptr_t)temp_dst, dst_size) != 0) { tloge("something wrong, unmap temp dst failed in to sharemem\n"); return -1; } diff --git a/services/huk_service/src/huk_derive_takey.c b/services/huk_service/src/huk_derive_takey.c index 32c8b740..fb47d30e 100644 --- a/services/huk_service/src/huk_derive_takey.c +++ b/services/huk_service/src/huk_derive_takey.c @@ -59,7 +59,7 @@ static void huk_srv_task_unmap(uint64_t virt_addr, uint32_t size) { if (virt_addr == 0) return; - if (munmap((void *)(uintptr_t)virt_addr, size) != 0) + if (unmap_sharemem((void *)(uintptr_t)virt_addr, size) != 0) tloge("huk srv unmap error\n"); } diff --git a/services/permission_service/src/perm_srv_common.c b/services/permission_service/src/perm_srv_common.c index d32e541c..af5019d5 100644 --- a/services/permission_service/src/perm_srv_common.c +++ b/services/permission_service/src/perm_srv_common.c @@ -37,7 +37,7 @@ void perm_srv_unmap_from_task(uint64_t vaddr, uint32_t size) if (vaddr == 0) return; - if (munmap((void *)(uintptr_t)vaddr, size) != 0) + if (unmap_sharemem((void *)(uintptr_t)vaddr, size) != 0) tloge("perm unmap error\n"); } diff --git a/services/ssa/src/secure_storage_agent/secure_storage_agent.c b/services/ssa/src/secure_storage_agent/secure_storage_agent.c index 191d5dd6..1a9bc095 100644 --- a/services/ssa/src/secure_storage_agent/secure_storage_agent.c +++ b/services/ssa/src/secure_storage_agent/secure_storage_agent.c @@ -678,7 +678,7 @@ void ssa_unmap_from_task(uint32_t task_id, uintptr_t va_addr, uint32_t size, boo return; } - (void)munmap((void *)va_addr, size); + (void)unmap_sharemem((void *)va_addr, size); } static void ssa_write_attributes(const uint8_t *attributes, uint32_t attributes_len, struct sfd_t *sfd, diff --git a/services/ssa/src/secure_storage_agent/sfs.c b/services/ssa/src/secure_storage_agent/sfs.c index 9096bcb1..7d54688f 100644 --- a/services/ssa/src/secure_storage_agent/sfs.c +++ b/services/ssa/src/secure_storage_agent/sfs.c @@ -527,7 +527,7 @@ static TEE_Result cal_construct_block(struct sfd_t *sfd, uint32_t data_size) struct block_info_t *last_block_pos = NULL; uint32_t block_size = CRYPT_BLOCK_SIZE_V3; uint8_t *buffer = NULL; - buffer = malloc_coherent(CRYPT_BLOCK_SIZE_V3); + buffer = malloc(CRYPT_BLOCK_SIZE_V3); if (buffer == NULL) return TEE_ERROR_OUT_OF_MEMORY;