Properly handle TEE_ObjectHandle output argument 54/212954/2
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Wed, 28 Aug 2019 12:44:13 +0000 (14:44 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Fri, 6 Sep 2019 09:59:17 +0000 (09:59 +0000)
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

ssflib/src/ssf_storage.cpp

index fce2d515cec117f8f9b8a26e7e52f823f986884a..44369aef723a9301631c3da0881b650b041d1138 100644 (file)
@@ -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;
 }