Allow to overwrite entries, remove deprecated flag. 47/260347/2
authorMichał Szaknis <m.szaknis@samsung.com>
Mon, 21 Jun 2021 13:57:13 +0000 (15:57 +0200)
committerMichał Szaknis <m.szaknis@samsung.com>
Thu, 24 Jun 2021 08:32:27 +0000 (10:32 +0200)
Entries were not overwritten correctly, because they were opened
instead of being recreated. The TEE_DATA_FLAG_EXCLUSIVE flag was
removed and replaced with the non-deprecated TEE_DATA_FLAG_OVERWRITE.

Change-Id: Idf1b0fd00949f7371c70ef35012c9ba0513e7ef3

include/include/tee_internal_api.h
ssflib/src/ssf_storage.cpp

index de7090629b534e8dff011e4130239783d0d756ae..a82990a32dddfc6fa5fabbdd07560904ae8b071e 100644 (file)
@@ -26,7 +26,7 @@
  */
 
 /**
- * Copyright (c) 2011-2017 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2011-2021 Samsung Electronics Co., Ltd All Rights Reserved
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -1052,7 +1052,7 @@ typedef struct __TEE_ObjectEnumHandle* TEE_ObjectEnumHandle;
 #define TEE_DATA_FLAG_SHARE_READ               0x00000010
 #define TEE_DATA_FLAG_SHARE_WRITE              0x00000020
 #define TEE_DATA_FLAG_CREATE                   0x00000200
-#define TEE_DATA_FLAG_EXCLUSIVE                        0x00000400
+#define TEE_DATA_FLAG_OVERWRITE                        0x00000400
 
 // Usage Constants
 #define TEE_USAGE_EXTRACTABLE                  0x00000001
index 44369aef723a9301631c3da0881b650b041d1138..c9ce5f73062738cfac2efb3a3cf76d4036feca58 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2015-2017 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2015-2021 Samsung Electronics Co., Ltd All Rights Reserved
  *
  *    Licensed under the Apache License, Version 2.0 (the "License");
  *    you may not use this file except in compliance with the License.
@@ -1071,8 +1071,9 @@ int update_share_info(po_share_info* share_info, uint32_t handleFlags,
        handleFlags &= ~TEE_HANDLE_FLAG_PERSISTENT;
        handleFlags &= ~TEE_HANDLE_FLAG_INITIALIZED;
 
+       // TODO: TEE_DATA_FLAG_OVERWRITE is already handled at this point.
        if ((handleFlags & TEE_DATA_FLAG_ACCESS_WRITE_META)
-           || (handleFlags & TEE_DATA_FLAG_EXCLUSIVE) || (0 == handleFlags)) {
+           || !(handleFlags & TEE_DATA_FLAG_OVERWRITE) || (0 == handleFlags)) {
                share_info->usr_info->x_user += (b_open ? 1 : -1);
                goto out;
        }
@@ -1805,7 +1806,7 @@ TEE_Result TEE_CreatePersistentObject(uint32_t storageID, const void* objectID,
        rc = exist_po(po);
        // already exist
        if (TEE_SUCCESS == rc) {
-               if (flags & TEE_DATA_FLAG_EXCLUSIVE) {
+               if (!(flags & TEE_DATA_FLAG_OVERWRITE)) {
                        MSG("Persistent object already exist.");
                        FREE_PO(po);
                        return TEE_ERROR_ACCESS_CONFLICT;
@@ -1814,10 +1815,9 @@ TEE_Result TEE_CreatePersistentObject(uint32_t storageID, const void* objectID,
                        FREE_PO(po);
                        return TEE_SUCCESS;
                }
-               rc = open_po(po);
-       } else {
-               rc = create_po(po, tr_obj, initialData, initialDataLen);
        }
+       rc = create_po(po, tr_obj, initialData, initialDataLen);
+
        if (rc) {
                FREE_PO(po);
                return rc;
@@ -1885,7 +1885,8 @@ TEE_Result TEE_RenamePersistentObject(TEE_ObjectHandle object,
        }
        persistent_object* po;
        po = (persistent_object*)object;
-       if (!(po->attr.info.handleFlags & TEE_DATA_FLAG_EXCLUSIVE) &&
+       // TODO: TEE_DATA_FLAG_OVERWRITE should have no meaning in this context
+       if ((po->attr.info.handleFlags & TEE_DATA_FLAG_OVERWRITE) &&
                !(po->attr.info.handleFlags & TEE_DATA_FLAG_ACCESS_WRITE_META)) {
                TZ_ERROR("operation error line = %d,%s\n", __LINE__, __func__);
                TEE_Panic(0);