TEE_Result TEE_CreatePersistentObject(uint32_t storageID, void *objectID, uint32_t objectIDLen, uint32_t flags, TEE_ObjectHandle attributes, const void *initialData, uint32_t initialDataLen, TEE_ObjectHandle *object) { TEE_Result res; uint32_t obj; if (storageID != TEE_STORAGE_PRIVATE) { res = TEE_ERROR_ITEM_NOT_FOUND; goto err; } if (!objectID) { res = TEE_ERROR_ITEM_NOT_FOUND; goto err; } if (objectIDLen > TEE_OBJECT_ID_MAX_LEN) { res = TEE_ERROR_BAD_PARAMETERS; goto err; } res = utee_storage_obj_create(storageID, objectID, objectIDLen, flags, (unsigned long)attributes, initialData, initialDataLen, &obj); if (res == TEE_SUCCESS) { if (object) *object = (TEE_ObjectHandle)(uintptr_t)obj; else res = utee_cryp_obj_close(obj); if (res == TEE_SUCCESS) goto out; } err: if (object) *object = TEE_HANDLE_NULL; if (res == TEE_ERROR_ITEM_NOT_FOUND || res == TEE_ERROR_ACCESS_CONFLICT || res == TEE_ERROR_OUT_OF_MEMORY || res == TEE_ERROR_STORAGE_NO_SPACE || res == TEE_ERROR_CORRUPT_OBJECT || res == TEE_ERROR_STORAGE_NOT_AVAILABLE) return res; TEE_Panic(0); out: return TEE_SUCCESS; }
TEE_Result TEE_CreatePersistentObject(uint32_t storageID, void *objectID, size_t objectIDLen, uint32_t flags, TEE_ObjectHandle attributes, const void *initialData, size_t initialDataLen, TEE_ObjectHandle *object) { if (storageID != TEE_STORAGE_PRIVATE) return TEE_ERROR_ITEM_NOT_FOUND; if (objectID == NULL) return TEE_ERROR_ITEM_NOT_FOUND; if (objectIDLen > TEE_OBJECT_ID_MAX_LEN) TEE_Panic(0); if (object == NULL) return TEE_ERROR_BAD_PARAMETERS; return utee_storage_obj_create(storageID, objectID, objectIDLen, flags, attributes, initialData, initialDataLen, object); }