diff --git a/cmd/optee.c b/cmd/optee.c index f1140176b6..705ac87433 100644 --- a/cmd/optee.c +++ b/cmd/optee.c @@ -30,9 +30,13 @@ int test_secure_storage_default(void) } debug("%s start\n", __func__); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return -1; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return -1; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -164,9 +168,13 @@ int test_secure_storage_security_partition(void) } debug("%s start\n", __func__); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return -1; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return -1; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, diff --git a/include/optee_include/OpteeClientInterface.h b/include/optee_include/OpteeClientInterface.h index c2e6f90c8f..b99229ee90 100644 --- a/include/optee_include/OpteeClientInterface.h +++ b/include/optee_include/OpteeClientInterface.h @@ -14,7 +14,7 @@ #define ATTEST_UUID_SIZE (ATAP_HEX_UUID_LEN+1) #define ATTEST_CA_OUT_SIZE 256 -void test_optee(void); +uint32_t test_optee(void); uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value); uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value); uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size); diff --git a/include/optee_include/OpteeClientMem.h b/include/optee_include/OpteeClientMem.h index ba85f829c3..1b9affbf36 100644 --- a/include/optee_include/OpteeClientMem.h +++ b/include/optee_include/OpteeClientMem.h @@ -9,7 +9,7 @@ #include -void OpteeClientMemInit(void); +int OpteeClientMemInit(void); void *OpteeClientMemAlloc(uint32_t length); diff --git a/include/optee_include/OpteeClientRkFs-v2.h b/include/optee_include/OpteeClientRkFs-v2.h index a8ee4d6c5b..fa710adb7e 100644 --- a/include/optee_include/OpteeClientRkFs-v2.h +++ b/include/optee_include/OpteeClientRkFs-v2.h @@ -70,6 +70,6 @@ int tee_supp_rk_fs_init(void); int tee_supp_rk_fs_process(size_t num_params, struct tee_ioctl_param *params); -void OpteeClientRkFsInit(void); +int OpteeClientRkFsInit(void); #endif diff --git a/include/optee_include/OpteeClientRkFs.h b/include/optee_include/OpteeClientRkFs.h index d7f68bc277..ed91aa9c11 100644 --- a/include/optee_include/OpteeClientRkFs.h +++ b/include/optee_include/OpteeClientRkFs.h @@ -33,6 +33,6 @@ int tee_supp_rk_fs_init(void); int tee_supp_rk_fs_process(void *cmd, uint32_t cmd_size); -void OpteeClientRkFsInit(void); +int OpteeClientRkFsInit(void); #endif diff --git a/lib/optee_clientApi/OpteeClientApiLib.c b/lib/optee_clientApi/OpteeClientApiLib.c index a2f8c12ab4..01f24ddb3e 100644 --- a/lib/optee_clientApi/OpteeClientApiLib.c +++ b/lib/optee_clientApi/OpteeClientApiLib.c @@ -17,11 +17,18 @@ TEEC_Result OpteeClientApiLibInitialize(void) { TEEC_Result status = TEEC_SUCCESS; - OpteeClientMemInit(); + status = OpteeClientMemInit(); + if (status != TEEC_SUCCESS) { + printf("OpteeClientMemInit fail!"); + return status; + } + status = OpteeClientRkFsInit(); + if (status != TEEC_SUCCESS) { + printf("OpteeClientRkFsInit fail!"); + return status; + } - OpteeClientRkFsInit(); - - return status; + return TEEC_SUCCESS; } /* diff --git a/lib/optee_clientApi/OpteeClientInterface.c b/lib/optee_clientApi/OpteeClientInterface.c index d2d5c758f4..c2f931ecc3 100644 --- a/lib/optee_clientApi/OpteeClientInterface.c +++ b/lib/optee_clientApi/OpteeClientInterface.c @@ -15,7 +15,7 @@ #define BOOT_FROM_EMMC (1 << 1) -void test_optee(void) +uint32_t test_optee(void) { TEEC_Result TeecResult; TEEC_Context TeecContext; @@ -29,13 +29,16 @@ void test_optee(void) dev_desc = rockchip_get_bootdev(); if (!dev_desc) { printf("%s: dev_desc is NULL!\n", __func__); - return; + return -TEEC_ERROR_GENERIC; } - debug("testmm start\n"); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -54,6 +57,8 @@ void test_optee(void) NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -61,6 +66,8 @@ void test_optee(void) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, "filename_test", SharedMem0.size); @@ -70,6 +77,8 @@ void test_optee(void) SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; memset(SharedMem1.buffer, 'a', SharedMem1.size); @@ -89,16 +98,14 @@ void test_optee(void) 1, &TeecOperation, &ErrorOrigin); - + if (TeecResult != TEEC_SUCCESS) + goto exit; +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); - TEEC_CloseSession(&TeecSession); - TEEC_FinalizeContext(&TeecContext); - - debug("testmm end\n"); - debug("TeecResult %x\n", TeecResult); + return TeecResult; } static uint8_t b2hs_add_base(uint8_t in) @@ -146,10 +153,14 @@ uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value) } b2hs((uint8_t *)&slot, hs, 4, 9); - debug("testmm start\n"); - OpteeClientApiLibInitialize(); + + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -167,8 +178,9 @@ uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value) TEEC_LOGIN_PUBLIC, NULL, &TeecOperation, - &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -176,6 +188,8 @@ uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, hs, SharedMem0.size); @@ -185,6 +199,8 @@ uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value) SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; TeecOperation.params[0].tmpref.size = SharedMem0.size; @@ -203,15 +219,12 @@ uint32_t trusty_read_rollback_index(uint32_t slot, uint64_t *value) &ErrorOrigin); if (TeecResult == TEEC_SUCCESS) memcpy((char *)value, SharedMem1.buffer, SharedMem1.size); - +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); - TEEC_CloseSession(&TeecSession); - TEEC_FinalizeContext(&TeecContext); - debug("testmm end\n"); return TeecResult; } @@ -234,9 +247,13 @@ uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value) } b2hs((uint8_t *)&slot, hs, 4, 9); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -255,6 +272,8 @@ uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value) NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -262,6 +281,8 @@ uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, hs, SharedMem0.size); @@ -271,6 +292,8 @@ uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value) SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem1.buffer, (char *)&value, SharedMem1.size); @@ -290,16 +313,14 @@ uint32_t trusty_write_rollback_index(uint32_t slot, uint64_t value) 1, &TeecOperation, &ErrorOrigin); - + if (TeecResult != TEEC_SUCCESS) + goto exit; +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); - TEEC_CloseSession(&TeecSession); - TEEC_FinalizeContext(&TeecContext); - debug("testmm end\n"); - return TeecResult; } @@ -320,10 +341,13 @@ uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size) return -TEEC_ERROR_GENERIC; } - debug("testmm start\n"); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -342,6 +366,8 @@ uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size) NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -349,6 +375,8 @@ uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); @@ -358,6 +386,8 @@ uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size) SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; TeecOperation.params[0].tmpref.size = SharedMem0.size; @@ -377,11 +407,11 @@ uint32_t trusty_read_permanent_attributes(uint8_t *attributes, uint32_t size) &ErrorOrigin); if (TeecResult == TEEC_SUCCESS) memcpy(attributes, SharedMem1.buffer, SharedMem1.size); +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); - debug("testmm end\n"); return TeecResult; } @@ -403,10 +433,13 @@ uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size) return -TEEC_ERROR_GENERIC; } - debug("testmm start\n"); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -425,6 +458,8 @@ uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size) NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -432,6 +467,8 @@ uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, "attributes", SharedMem0.size); @@ -441,6 +478,8 @@ uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size) SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem1.buffer, attributes, SharedMem1.size); @@ -460,12 +499,13 @@ uint32_t trusty_write_permanent_attributes(uint8_t *attributes, uint32_t size) 1, &TeecOperation, &ErrorOrigin); - + if (TeecResult != TEEC_SUCCESS) + goto exit; +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); - debug("testmm end\n"); return TeecResult; } @@ -489,9 +529,14 @@ uint32_t trusty_read_permanent_attributes_cer(uint8_t *attributes, return -TEEC_ERROR_GENERIC; } - debug("testmm start\n"); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; + TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; + TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, @@ -510,18 +555,24 @@ uint32_t trusty_read_permanent_attributes_cer(uint8_t *attributes, NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; SharedMem0.size = sizeof("rsacer"); SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, "rsacer", SharedMem0.size); TEEC_SharedMemory SharedMem1 = {0}; SharedMem1.size = size; SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; TeecOperation.params[0].tmpref.size = SharedMem0.size; TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; @@ -537,11 +588,11 @@ uint32_t trusty_read_permanent_attributes_cer(uint8_t *attributes, &ErrorOrigin); if (TeecResult == TEEC_SUCCESS) memcpy(attributes, SharedMem1.buffer, SharedMem1.size); +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); - debug("testmm end\n"); return TeecResult; } @@ -565,9 +616,14 @@ uint32_t trusty_write_permanent_attributes_cer(uint8_t *attributes, return -TEEC_ERROR_GENERIC; } - debug("testmm start\n"); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; + TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; + TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, @@ -586,18 +642,24 @@ uint32_t trusty_write_permanent_attributes_cer(uint8_t *attributes, NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; SharedMem0.size = sizeof("rsacer"); SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, "rsacer", SharedMem0.size); TEEC_SharedMemory SharedMem1 = {0}; SharedMem1.size = size; SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem1.buffer, attributes, SharedMem1.size); TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; TeecOperation.params[0].tmpref.size = SharedMem0.size; @@ -612,12 +674,13 @@ uint32_t trusty_write_permanent_attributes_cer(uint8_t *attributes, 1, &TeecOperation, &ErrorOrigin); - + if (TeecResult != TEEC_SUCCESS) + goto exit; +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); - debug("testmm end\n"); return TeecResult; } @@ -639,10 +702,13 @@ uint32_t trusty_read_lock_state(uint8_t *lock_state) return -TEEC_ERROR_GENERIC; } - debug("testmm start\n"); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -661,6 +727,8 @@ uint32_t trusty_read_lock_state(uint8_t *lock_state) NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -668,6 +736,8 @@ uint32_t trusty_read_lock_state(uint8_t *lock_state) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); @@ -677,6 +747,8 @@ uint32_t trusty_read_lock_state(uint8_t *lock_state) SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; TeecOperation.params[0].tmpref.size = SharedMem0.size; @@ -696,11 +768,11 @@ uint32_t trusty_read_lock_state(uint8_t *lock_state) &ErrorOrigin); if (TeecResult == TEEC_SUCCESS) memcpy(lock_state, SharedMem1.buffer, SharedMem1.size); +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); - debug("testmm end\n"); return TeecResult; } @@ -722,10 +794,13 @@ uint32_t trusty_write_lock_state(uint8_t lock_state) return -TEEC_ERROR_GENERIC; } - debug("testmm start\n"); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -744,6 +819,8 @@ uint32_t trusty_write_lock_state(uint8_t lock_state) NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -751,6 +828,8 @@ uint32_t trusty_write_lock_state(uint8_t lock_state) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, "lock_state", SharedMem0.size); @@ -760,6 +839,8 @@ uint32_t trusty_write_lock_state(uint8_t lock_state) SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem1.buffer, &lock_state, SharedMem1.size); @@ -779,12 +860,13 @@ uint32_t trusty_write_lock_state(uint8_t lock_state) 1, &TeecOperation, &ErrorOrigin); - + if (TeecResult != TEEC_SUCCESS) + goto exit; +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); - debug("testmm end\n"); return TeecResult; } @@ -806,10 +888,13 @@ uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state) return -TEEC_ERROR_GENERIC; } - debug("testmm start\n"); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -828,6 +913,8 @@ uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state) NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -835,6 +922,8 @@ uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); @@ -844,6 +933,8 @@ uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state) SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; TeecOperation.params[0].tmpref.size = SharedMem0.size; @@ -863,11 +954,11 @@ uint32_t trusty_read_flash_lock_state(uint8_t *flash_lock_state) &ErrorOrigin); if (TeecResult == TEEC_SUCCESS) memcpy(flash_lock_state, SharedMem1.buffer, SharedMem1.size); +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); - debug("testmm end\n"); return TeecResult; } @@ -890,10 +981,13 @@ uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state) return -TEEC_ERROR_GENERIC; } - debug("testmm start\n"); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -912,6 +1006,8 @@ uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state) NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -919,6 +1015,8 @@ uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, "flash_lock_state", SharedMem0.size); @@ -928,6 +1026,8 @@ uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state) SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem1.buffer, &flash_lock_state, SharedMem1.size); @@ -947,7 +1047,9 @@ uint32_t trusty_write_flash_lock_state(uint8_t flash_lock_state) 1, &TeecOperation, &ErrorOrigin); - + if (TeecResult != TEEC_SUCCESS) + goto exit; +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); TEEC_CloseSession(&TeecSession); @@ -969,9 +1071,13 @@ uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length) TEEC_UUID *TeecUuid = &tempuuid; TEEC_Operation TeecOperation = {0}; - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_OpenSession(&TeecContext, &TeecSession, @@ -980,6 +1086,8 @@ uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length) NULL, NULL, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -987,6 +1095,8 @@ uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; TeecOperation.params[0].tmpref.size = SharedMem0.size; @@ -1003,7 +1113,7 @@ uint32_t trusty_read_attribute_hash(uint32_t *buf, uint32_t length) if (TeecResult == TEEC_SUCCESS) memcpy(buf, SharedMem0.buffer, SharedMem0.size); - +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); @@ -1023,9 +1133,13 @@ uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length) TEEC_UUID *TeecUuid = &tempuuid; TEEC_Operation TeecOperation = {0}; - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_OpenSession(&TeecContext, &TeecSession, @@ -1034,6 +1148,8 @@ uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length) NULL, NULL, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -1041,6 +1157,8 @@ uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, buf, SharedMem0.size); @@ -1056,7 +1174,9 @@ uint32_t trusty_write_attribute_hash(uint32_t *buf, uint32_t length) 1, &TeecOperation, &ErrorOrigin); - + if (TeecResult != TEEC_SUCCESS) + goto exit; +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); @@ -1075,9 +1195,13 @@ uint32_t notify_optee_rpmb_ta(void) TEEC_UUID *TeecUuid = &tempuuid; TEEC_Operation TeecOperation = {0}; - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_OpenSession(&TeecContext, &TeecSession, @@ -1086,6 +1210,8 @@ uint32_t notify_optee_rpmb_ta(void) NULL, NULL, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, @@ -1096,7 +1222,9 @@ uint32_t notify_optee_rpmb_ta(void) 2, &TeecOperation, &ErrorOrigin); - + if (TeecResult != TEEC_SUCCESS) + goto exit; +exit: TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); @@ -1115,9 +1243,13 @@ uint32_t notify_optee_efuse_ta(void) TEEC_UUID *TeecUuid = &tempuuid; TEEC_Operation TeecOperation = {0}; - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_OpenSession(&TeecContext, &TeecSession, @@ -1126,6 +1258,8 @@ uint32_t notify_optee_efuse_ta(void) NULL, NULL, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, @@ -1136,7 +1270,9 @@ uint32_t notify_optee_efuse_ta(void) 2, &TeecOperation, &ErrorOrigin); - + if (TeecResult != TEEC_SUCCESS) + goto exit; +exit: TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); @@ -1163,9 +1299,13 @@ uint32_t trusty_read_vbootkey_hash(uint32_t *buf, uint32_t length) TEEC_UUID *TeecUuid = &tempuuid; TEEC_Operation TeecOperation = {0}; - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_OpenSession(&TeecContext, &TeecSession, @@ -1174,6 +1314,8 @@ uint32_t trusty_read_vbootkey_hash(uint32_t *buf, uint32_t length) NULL, NULL, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -1181,6 +1323,8 @@ uint32_t trusty_read_vbootkey_hash(uint32_t *buf, uint32_t length) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; TeecOperation.params[0].tmpref.size = SharedMem0.size; @@ -1197,7 +1341,7 @@ uint32_t trusty_read_vbootkey_hash(uint32_t *buf, uint32_t length) if (TeecResult == TEEC_SUCCESS) memcpy(buf, SharedMem0.buffer, SharedMem0.size); - +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); @@ -1216,9 +1360,13 @@ uint32_t trusty_write_vbootkey_hash(uint32_t *buf, uint32_t length) TEEC_UUID *TeecUuid = &tempuuid; TEEC_Operation TeecOperation = {0}; - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_OpenSession(&TeecContext, &TeecSession, @@ -1227,6 +1375,8 @@ uint32_t trusty_write_vbootkey_hash(uint32_t *buf, uint32_t length) NULL, NULL, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -1234,6 +1384,8 @@ uint32_t trusty_write_vbootkey_hash(uint32_t *buf, uint32_t length) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, buf, SharedMem0.size); @@ -1249,7 +1401,9 @@ uint32_t trusty_write_vbootkey_hash(uint32_t *buf, uint32_t length) 4, &TeecOperation, &ErrorOrigin); - + if (TeecResult != TEEC_SUCCESS) + goto exit; +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); @@ -1270,9 +1424,13 @@ uint32_t trusty_read_vbootkey_enable_flag(uint8_t *flag) TEEC_UUID *TeecUuid = &tempuuid; TEEC_Operation TeecOperation = {0}; - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_OpenSession(&TeecContext, &TeecSession, @@ -1281,6 +1439,8 @@ uint32_t trusty_read_vbootkey_enable_flag(uint8_t *flag) NULL, NULL, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -1288,6 +1448,8 @@ uint32_t trusty_read_vbootkey_enable_flag(uint8_t *flag) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; TeecOperation.params[0].tmpref.size = SharedMem0.size; @@ -1307,7 +1469,7 @@ uint32_t trusty_read_vbootkey_enable_flag(uint8_t *flag) if (bootflag == 0x000000FF) *flag = 1; } - +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); @@ -1332,10 +1494,13 @@ uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes) return -TEEC_ERROR_GENERIC; } - debug("testmm start\n"); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -1354,6 +1519,8 @@ uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes) NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -1361,6 +1528,8 @@ uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); @@ -1370,6 +1539,8 @@ uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes) SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; TeecOperation.params[0].tmpref.size = SharedMem0.size; @@ -1388,11 +1559,11 @@ uint32_t trusty_read_permanent_attributes_flag(uint8_t *attributes) &ErrorOrigin); if (TeecResult == TEEC_SUCCESS) memcpy(attributes, SharedMem1.buffer, SharedMem1.size); +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); - debug("testmm end\n"); return TeecResult; } @@ -1414,10 +1585,13 @@ uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes) return -TEEC_ERROR_GENERIC; } - debug("testmm start\n"); - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -1436,6 +1610,8 @@ uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes) NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -1443,6 +1619,8 @@ uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, "attributes_flag", SharedMem0.size); @@ -1452,6 +1630,8 @@ uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes) SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem1.buffer, (char *)&attributes, SharedMem1.size); @@ -1470,12 +1650,13 @@ uint32_t trusty_write_permanent_attributes_flag(uint8_t attributes) 1, &TeecOperation, &ErrorOrigin); - + if (TeecResult != TEEC_SUCCESS) + goto exit; +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); TEEC_CloseSession(&TeecSession); TEEC_FinalizeContext(&TeecContext); - debug("testmm end\n"); return TeecResult; } @@ -1500,9 +1681,13 @@ uint32_t trusty_attest_dh(uint8_t *dh, uint32_t *dh_size) return -TEEC_ERROR_GENERIC; } - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -1521,6 +1706,8 @@ uint32_t trusty_attest_dh(uint8_t *dh, uint32_t *dh_size) NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -1528,6 +1715,8 @@ uint32_t trusty_attest_dh(uint8_t *dh, uint32_t *dh_size) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; TeecOperation.params[0].tmpref.size = SharedMem0.size; @@ -1541,14 +1730,15 @@ uint32_t trusty_attest_dh(uint8_t *dh, uint32_t *dh_size) 143, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + goto exit; *dh_size = TeecOperation.params[0].tmpref.size; memcpy(dh, SharedMem0.buffer, SharedMem0.size); - +exit: TEEC_ReleaseSharedMemory(&SharedMem0); - TEEC_CloseSession(&TeecSession); - TeecResult = TEEC_FinalizeContext(&TeecContext); + TEEC_FinalizeContext(&TeecContext); return TeecResult; } @@ -1573,9 +1763,13 @@ uint32_t trusty_attest_uuid(uint8_t *uuid, uint32_t *uuid_size) return -TEEC_ERROR_GENERIC; } - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -1594,6 +1788,8 @@ uint32_t trusty_attest_uuid(uint8_t *uuid, uint32_t *uuid_size) NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -1601,6 +1797,8 @@ uint32_t trusty_attest_uuid(uint8_t *uuid, uint32_t *uuid_size) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; TeecOperation.params[0].tmpref.buffer = SharedMem0.buffer; TeecOperation.params[0].tmpref.size = SharedMem0.size; @@ -1614,14 +1812,15 @@ uint32_t trusty_attest_uuid(uint8_t *uuid, uint32_t *uuid_size) 144, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + goto exit; *uuid_size = TeecOperation.params[0].tmpref.size; memcpy(uuid, SharedMem0.buffer, SharedMem0.size); - +exit: TEEC_ReleaseSharedMemory(&SharedMem0); - TEEC_CloseSession(&TeecSession); - TeecResult = TEEC_FinalizeContext(&TeecContext); + TEEC_FinalizeContext(&TeecContext); return TeecResult; } @@ -1636,8 +1835,6 @@ uint32_t trusty_attest_get_ca(uint8_t *operation_start, TEEC_Session TeecSession; uint32_t ErrorOrigin; - OpteeClientApiLibInitialize(); - TEEC_UUID tempuuid = { 0x258be795, 0xf9ca, 0x40e6, { 0xa8, 0x69, 0x9c, 0xe6, 0x88, 0x6c, 0x5d, 0x5d @@ -1653,9 +1850,13 @@ uint32_t trusty_attest_get_ca(uint8_t *operation_start, return -TEEC_ERROR_GENERIC; } - OpteeClientApiLibInitialize(); + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -1674,6 +1875,8 @@ uint32_t trusty_attest_get_ca(uint8_t *operation_start, NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -1681,6 +1884,8 @@ uint32_t trusty_attest_get_ca(uint8_t *operation_start, SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, operation_start, SharedMem0.size); @@ -1693,6 +1898,8 @@ uint32_t trusty_attest_get_ca(uint8_t *operation_start, SharedMem1.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem1); + if (TeecResult != TEEC_SUCCESS) + goto exit; TeecOperation.params[1].tmpref.buffer = SharedMem1.buffer; TeecOperation.params[1].tmpref.size = SharedMem1.size; @@ -1706,11 +1913,16 @@ uint32_t trusty_attest_get_ca(uint8_t *operation_start, 145, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + goto exit; *out_len = TeecOperation.params[1].tmpref.size; memcpy(out, SharedMem1.buffer, SharedMem1.size); +exit: TEEC_ReleaseSharedMemory(&SharedMem0); TEEC_ReleaseSharedMemory(&SharedMem1); + TEEC_CloseSession(&TeecSession); + TEEC_FinalizeContext(&TeecContext); return TeecResult; } @@ -1734,8 +1946,13 @@ uint32_t trusty_attest_set_ca(uint8_t *ca_response, uint32_t *ca_response_size) printf("%s: dev_desc is NULL!\n", __func__); return -TEEC_ERROR_GENERIC; } + TeecResult = OpteeClientApiLibInitialize(); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecResult = TEEC_InitializeContext(NULL, &TeecContext); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TeecOperation.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, @@ -1754,6 +1971,8 @@ uint32_t trusty_attest_set_ca(uint8_t *ca_response, uint32_t *ca_response_size) NULL, &TeecOperation, &ErrorOrigin); + if (TeecResult != TEEC_SUCCESS) + return TeecResult; TEEC_SharedMemory SharedMem0 = {0}; @@ -1761,6 +1980,8 @@ uint32_t trusty_attest_set_ca(uint8_t *ca_response, uint32_t *ca_response_size) SharedMem0.flags = 0; TeecResult = TEEC_AllocateSharedMemory(&TeecContext, &SharedMem0); + if (TeecResult != TEEC_SUCCESS) + goto exit; memcpy(SharedMem0.buffer, ca_response, SharedMem0.size); @@ -1776,11 +1997,12 @@ uint32_t trusty_attest_set_ca(uint8_t *ca_response, uint32_t *ca_response_size) 146, &TeecOperation, &ErrorOrigin); - + if (TeecResult != TEEC_SUCCESS) + goto exit; +exit: TEEC_ReleaseSharedMemory(&SharedMem0); - TEEC_CloseSession(&TeecSession); - TeecResult = TEEC_FinalizeContext(&TeecContext); + TEEC_FinalizeContext(&TeecContext); return TeecResult; } diff --git a/lib/optee_clientApi/OpteeClientMem.c b/lib/optee_clientApi/OpteeClientMem.c index cec5b50c3b..d290567d83 100644 --- a/lib/optee_clientApi/OpteeClientMem.c +++ b/lib/optee_clientApi/OpteeClientMem.c @@ -14,7 +14,7 @@ void *my_mem_start; uint32_t my_count; -uint8_t *my_flag; +uint8_t *my_flag = NULL; typedef struct { void *addrBlock; uint32_t sizeBlock; @@ -22,14 +22,25 @@ typedef struct { } ALLOC_FLAG; ALLOC_FLAG alloc_flags[50]; -void my_malloc_init(void *start, uint32_t size) +int my_malloc_init(void *start, uint32_t size) { + if (start == NULL || size == 0) { + printf("malloc init fail!"); + return -1; + } memset(start, 0, size); my_mem_start = start; my_count = size/4096; - my_flag = malloc(size/4096); + if (my_flag == NULL) { + my_flag = malloc(size/4096); + if (my_flag == NULL) { + printf("malloc fail!"); + return -1; + } + } memset(my_flag, 0, size/4096); memset(alloc_flags, 0, 50 * sizeof(ALLOC_FLAG)); + return 0; } void write_usedblock(void *addr, uint32_t size) @@ -75,7 +86,8 @@ void *my_malloc(uint32_t size) uint32_t i, j, k, num; num = (size - 1) / 4096 + 1; - + if (my_count < num) + return 0; for (i = 0; i < my_count - num; i++) { if (*(my_flag + i) == 0) { for (j = 0; j < num; j++) { @@ -127,7 +139,7 @@ void my_free(void *ptr) * Initlialize the memory component, for example providing the * containing drivers handle. */ -void OpteeClientMemInit(void) +int OpteeClientMemInit(void) { ARM_SMC_ARGS ArmSmcArgs = {0}; @@ -143,7 +155,7 @@ void OpteeClientMemInit(void) debug("get share memory, arg0=0x%x arg1=0x%x arg2=0x%x arg3=0x%x\n", ArmSmcArgs.Arg0, ArmSmcArgs.Arg1, ArmSmcArgs.Arg2, ArmSmcArgs.Arg3); - my_malloc_init((void *)(size_t)ArmSmcArgs.Arg1, ArmSmcArgs.Arg2); + return my_malloc_init((void *)(size_t)ArmSmcArgs.Arg1, ArmSmcArgs.Arg2); } /* diff --git a/lib/optee_clientApi/OpteeClientRkFs-v2.c b/lib/optee_clientApi/OpteeClientRkFs-v2.c index 18be31a61f..b1f634997d 100644 --- a/lib/optee_clientApi/OpteeClientRkFs-v2.c +++ b/lib/optee_clientApi/OpteeClientRkFs-v2.c @@ -1233,10 +1233,10 @@ int tee_supp_rk_fs_init(void) return TEEC_SUCCESS; } -void OpteeClientRkFsInit(void) +int OpteeClientRkFsInit(void) { debug(" OpteeClientRkFsInit\n"); - tee_supp_rk_fs_init(); + return tee_supp_rk_fs_init(); } bool tee_supp_param_is_value(struct tee_ioctl_param *param) { diff --git a/lib/optee_clientApi/OpteeClientRkFs.c b/lib/optee_clientApi/OpteeClientRkFs.c index 55dec3e212..25a639c5a8 100644 --- a/lib/optee_clientApi/OpteeClientRkFs.c +++ b/lib/optee_clientApi/OpteeClientRkFs.c @@ -1277,10 +1277,10 @@ int tee_supp_rk_fs_init(void) return 0; } -void OpteeClientRkFsInit(void) +int OpteeClientRkFsInit(void) { debug(" OpteeClientRkFsInit\n"); - tee_supp_rk_fs_init(); + return tee_supp_rk_fs_init(); } static int rkss_step = 0;