summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>2019-08-28 14:44:13 +0200
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>2019-09-06 09:59:17 +0000
commite6437523209a9a8a3d70a0853f1bd57a381feecc (patch)
treeb42ea4b0372ffdc13e085c1b89045b7f6931dd8d
parent036358c5fa63c18a9cd6ddd3b499401bd2515416 (diff)
downloadtef-simulator-e6437523209a9a8a3d70a0853f1bd57a381feecc.tar.gz
tef-simulator-e6437523209a9a8a3d70a0853f1bd57a381feecc.tar.bz2
tef-simulator-e6437523209a9a8a3d70a0853f1bd57a381feecc.zip
Properly handle TEE_ObjectHandle output argument
According to GP spec v1.1 and v1.2 TEE_CreatePersistentObject and TEE_OpenPersistentObject should set 'object' argument to TEE_HANDLE_NULL in case of failure. Change-Id: I23c0a7b631482eb863f0d09232a5a8f9e47c0593
-rw-r--r--ssflib/src/ssf_storage.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/ssflib/src/ssf_storage.cpp b/ssflib/src/ssf_storage.cpp
index fce2d51..44369ae 100644
--- a/ssflib/src/ssf_storage.cpp
+++ b/ssflib/src/ssf_storage.cpp
@@ -1792,6 +1792,10 @@ TEE_Result TEE_CreatePersistentObject(uint32_t storageID, const void* objectID,
const void* initialData, size_t initialDataLen, TEE_ObjectHandle* object) {
PERMISSION_CHECK(PERM_STORAGE);
persistent_object* po = NULL;
+
+ if (object)
+ *object = TEE_HANDLE_NULL;
+
TEE_Result rc = allocate_persistent_object(&po, storageID, objectID,
objectIDLen, flags);
TransientObject* tr_obj = NULL;
@@ -1830,6 +1834,10 @@ TEE_Result TEE_OpenPersistentObject(uint32_t storageID, const void* objectID,
size_t objectIDLen, uint32_t flags, TEE_ObjectHandle* object) {
PERMISSION_CHECK(PERM_STORAGE);
persistent_object* po = NULL;
+
+ if (object)
+ *object = TEE_HANDLE_NULL;
+
TEE_Result rc = allocate_persistent_object(&po, storageID, objectID,
objectIDLen, flags);
if (rc) {
@@ -1840,7 +1848,8 @@ TEE_Result TEE_OpenPersistentObject(uint32_t storageID, const void* objectID,
FREE_PO(po);
return rc;
}
- *object = (TEE_ObjectHandle)&po->attr.info;
+ if (object)
+ *object = (TEE_ObjectHandle)&po->attr.info;
return TEE_SUCCESS;
}