xtest 6xxx: test multiple storage IDs as supported by OP-TEE
Update xtest 6xxx to test the OP-TEE specific storage IDs
(TEE_STORAGE_PRIVATE_REE, TEE_STORAGE_PRIVATE_RPMB) in addition to the
default, GP-defined value: TEE_STORAGE_PRIVATE. Which values are
enabled is determined at compile time based on whether CFG_REE_FS and
CFG_RPMB_FS are 'y' or 'n' (these values are exported by optee_os and
may be overriden).
Among all the tests in the 6xxx series, 6010 and 6011 are not updated
(i.e., they test only TEE_STORAGE_PRIVATE) because they are GP tests.
xtest_20000.c is updated accordingly, due to the change in the
interface between xtest and the secure storage TA.
Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
Tested-by: David Brown <david.brown@linaro.org>
Reviewed-by: David Brown <david.brown@linaro.org>
diff --git a/Android.mk b/Android.mk
index 7b2ee64..e23c777 100644
--- a/Android.mk
+++ b/Android.mk
@@ -60,6 +60,9 @@
ifeq ($(CFG_REE_FS),y)
LOCAL_CFLAGS += -DCFG_REE_FS
endif
+ifeq ($(CFG_RPMB_FS),y)
+LOCAL_CFLAGS += -DCFG_RPMB_FS
+endif
LOCAL_CFLAGS += -DUSER_SPACE
LOCAL_CFLAGS += -DTA_DIR=\"/system/lib/optee_armtz\"
diff --git a/host/xtest/Makefile b/host/xtest/Makefile
index 4c3b2cf..7d987fb 100644
--- a/host/xtest/Makefile
+++ b/host/xtest/Makefile
@@ -117,6 +117,9 @@
ifeq ($(CFG_REE_FS),y)
CFLAGS += -DCFG_REE_FS
endif
+ifeq ($(CFG_RPMB_FS),y)
+CFLAGS += -DCFG_RPMB_FS
+endif
ifndef CFG_GP_PACKAGE_PATH
CFLAGS += -Wall -Wcast-align -Werror \
diff --git a/host/xtest/xtest_20000.c b/host/xtest/xtest_20000.c
index 4b7fb1b..df0d913 100644
--- a/host/xtest/xtest_20000.c
+++ b/host/xtest/xtest_20000.c
@@ -135,9 +135,11 @@
op.params[0].tmpref.size = id_size;
op.params[1].value.a = flags;
op.params[1].value.b = 0;
+ op.params[2].value.a = TEE_STORAGE_PRIVATE;
op.paramTypes = TEEC_PARAM_TYPES(
- TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INOUT, TEEC_NONE, TEEC_NONE);
+ TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INOUT, TEEC_VALUE_INPUT,
+ TEEC_NONE);
res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_OPEN, &op, &org);
@@ -161,7 +163,7 @@
op.params[1].value.a = flags;
op.params[1].value.b = 0;
op.params[2].value.a = attr;
- op.params[2].value.b = 0;
+ op.params[2].value.b = TEE_STORAGE_PRIVATE;
op.params[3].tmpref.buffer = data;
op.params[3].tmpref.size = data_size;
diff --git a/host/xtest/xtest_6000.c b/host/xtest/xtest_6000.c
index 0358a2b..956be70 100644
--- a/host/xtest/xtest_6000.c
+++ b/host/xtest/xtest_6000.c
@@ -21,10 +21,22 @@
#include <tee_client_api.h>
#include <ta_storage.h>
#include <tee_api_defines.h>
+#include <tee_api_defines_extensions.h>
#include <tee_api_types.h>
#ifdef WITH_GP_TESTS
#include <TTA_DS_protocol.h>
#endif
+#include <util.h>
+
+static uint32_t storage_ids[] = {
+ TEE_STORAGE_PRIVATE,
+#ifdef CFG_REE_FS
+ TEE_STORAGE_PRIVATE_REE,
+#endif
+#ifdef CFG_RPMB_FS
+ TEE_STORAGE_PRIVATE_RPMB,
+#endif
+};
static uint8_t file_00[] = {
0x00, 0x6E, 0x04, 0x57, 0x08, 0xFB, 0x71, 0x96,
@@ -64,7 +76,7 @@
};
static TEEC_Result fs_open(TEEC_Session *sess, void *id, uint32_t id_size,
- uint32_t flags, uint32_t *obj)
+ uint32_t flags, uint32_t *obj, uint32_t storage_id)
{
TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
TEEC_Result res;
@@ -74,9 +86,10 @@
op.params[0].tmpref.size = id_size;
op.params[1].value.a = flags;
op.params[1].value.b = 0;
+ op.params[2].value.a = storage_id;
op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
- TEEC_VALUE_INOUT, TEEC_NONE,
+ TEEC_VALUE_INOUT, TEEC_VALUE_INPUT,
TEEC_NONE);
res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_OPEN, &op, &org);
@@ -89,7 +102,8 @@
static TEEC_Result fs_create(TEEC_Session *sess, void *id, uint32_t id_size,
uint32_t flags, uint32_t attr, void *data,
- uint32_t data_size, uint32_t *obj)
+ uint32_t data_size, uint32_t *obj,
+ uint32_t storage_id)
{
TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
TEEC_Result res;
@@ -100,7 +114,7 @@
op.params[1].value.a = flags;
op.params[1].value.b = 0;
op.params[2].value.a = attr;
- op.params[2].value.b = 0;
+ op.params[2].value.b = storage_id;
op.params[3].tmpref.buffer = data;
op.params[3].tmpref.size = data_size;
@@ -117,7 +131,7 @@
}
static TEEC_Result fs_create_overwrite(TEEC_Session *sess, void *id,
- uint32_t id_size)
+ uint32_t id_size, uint32_t storage_id)
{
TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
TEEC_Result res;
@@ -125,9 +139,10 @@
op.params[0].tmpref.buffer = id;
op.params[0].tmpref.size = id_size;
+ op.params[1].value.a = storage_id;
op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
- TEEC_NONE, TEEC_NONE,
+ TEEC_VALUE_INPUT, TEEC_NONE,
TEEC_NONE);
res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_CREATE_OVERWRITE, &op, &org);
@@ -280,7 +295,8 @@
return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_FREE_ENUM, &op, &org);
}
-static TEEC_Result fs_start_enum(TEEC_Session *sess, uint32_t e)
+static TEEC_Result fs_start_enum(TEEC_Session *sess, uint32_t e,
+ uint32_t storage_id)
{
TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
uint32_t org;
@@ -289,6 +305,7 @@
TEEC_NONE, TEEC_NONE);
op.params[0].value.a = e;
+ op.params[0].value.b = storage_id;
return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_START_ENUM, &op, &org);
}
@@ -314,7 +331,7 @@
}
/* trunc */
-static void test_truncate_file_length(ADBG_Case_t *c)
+static void test_truncate_file_length(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t obj;
@@ -332,7 +349,7 @@
TEE_DATA_FLAG_ACCESS_WRITE |
TEE_DATA_FLAG_ACCESS_READ |
TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
- sizeof(data_00), &obj)))
+ sizeof(data_00), &obj, storage_id)))
goto exit;
/* trunc */
@@ -360,7 +377,7 @@
}
/* extend */
-static void test_extend_file_length(ADBG_Case_t *c)
+static void test_extend_file_length(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t obj;
@@ -379,7 +396,7 @@
TEE_DATA_FLAG_ACCESS_WRITE |
TEE_DATA_FLAG_ACCESS_READ |
TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
- sizeof(data_00), &obj)))
+ sizeof(data_00), &obj, storage_id)))
goto exit;
/* extend */
@@ -409,7 +426,7 @@
}
/* file hole */
-static void test_file_hole(ADBG_Case_t *c)
+static void test_file_hole(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t obj;
@@ -428,7 +445,7 @@
TEE_DATA_FLAG_ACCESS_WRITE |
TEE_DATA_FLAG_ACCESS_READ |
TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
- sizeof(data_00), &obj)))
+ sizeof(data_00), &obj, storage_id)))
goto exit;
/* seek */
@@ -622,7 +639,7 @@
#endif
/* create */
-static void xtest_tee_test_6001(ADBG_Case_t *c)
+static void xtest_tee_test_6001_single(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t obj;
@@ -636,7 +653,7 @@
fs_create(&sess, file_00, sizeof(file_00),
TEE_DATA_FLAG_ACCESS_WRITE |
TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
- sizeof(data_00), &obj)))
+ sizeof(data_00), &obj, storage_id)))
goto exit;
/* clean */
@@ -647,8 +664,22 @@
TEEC_CloseSession(&sess);
}
+#define DEFINE_TEST_MULTIPLE_STORAGE_IDS(test_name) \
+static void test_name(ADBG_Case_t *c) \
+{ \
+ size_t i; \
+ \
+ for (i = 0; i < ARRAY_SIZE(storage_ids); i++) { \
+ Do_ADBG_BeginSubCase(c, "Storage id: %08x", storage_ids[i]); \
+ test_name##_single(c, storage_ids[i]); \
+ Do_ADBG_EndSubCase(c, "Storage id: %08x", storage_ids[i]); \
+ } \
+}
+
+DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6001)
+
/* open */
-static void xtest_tee_test_6002(ADBG_Case_t *c)
+static void xtest_tee_test_6002_single(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t obj;
@@ -661,7 +692,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_create(&sess, file_01, sizeof(file_01),
TEE_DATA_FLAG_ACCESS_WRITE, 0, data_00,
- sizeof(data_00), &obj)))
+ sizeof(data_00), &obj, storage_id)))
goto exit;
if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
@@ -669,7 +700,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_open(&sess, file_01, sizeof(file_01),
- TEE_DATA_FLAG_ACCESS_WRITE_META, &obj)))
+ TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
goto exit;
if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
@@ -677,7 +708,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_open(&sess, file_01, sizeof(file_01),
- TEE_DATA_FLAG_ACCESS_WRITE_META, &obj)))
+ TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
goto exit;
/* clean */
@@ -688,8 +719,10 @@
TEEC_CloseSession(&sess);
}
+DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6002)
+
/* read */
-static void xtest_tee_test_6003(ADBG_Case_t *c)
+static void xtest_tee_test_6003_single(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t obj;
@@ -704,7 +737,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_create(&sess, file_02, sizeof(file_02),
TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
- sizeof(data_01), &obj)))
+ sizeof(data_01), &obj, storage_id)))
goto exit;
if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
@@ -713,7 +746,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_open(&sess, file_02, sizeof(file_02),
TEE_DATA_FLAG_ACCESS_READ |
- TEE_DATA_FLAG_ACCESS_WRITE_META, &obj)))
+ TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
goto exit;
if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
@@ -729,8 +762,10 @@
TEEC_CloseSession(&sess);
}
+DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6003)
+
/* write */
-static void xtest_tee_test_6004(ADBG_Case_t *c)
+static void xtest_tee_test_6004_single(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t obj;
@@ -746,7 +781,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_create(&sess, file_02, sizeof(file_02),
TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
- sizeof(data_01), &obj)))
+ sizeof(data_01), &obj, storage_id)))
goto exit;
if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
@@ -755,7 +790,7 @@
/* write new data */
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_open(&sess, file_02, sizeof(file_02),
- TEE_DATA_FLAG_ACCESS_WRITE, &obj)))
+ TEE_DATA_FLAG_ACCESS_WRITE, &obj, storage_id)))
goto exit;
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
@@ -769,7 +804,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_open(&sess, file_02, sizeof(file_02),
TEE_DATA_FLAG_ACCESS_READ |
- TEE_DATA_FLAG_ACCESS_WRITE_META, &obj)))
+ TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
goto exit;
if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
@@ -785,8 +820,10 @@
TEEC_CloseSession(&sess);
}
+DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6004)
+
/* seek */
-static void xtest_tee_test_6005(ADBG_Case_t *c)
+static void xtest_tee_test_6005_single(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t obj;
@@ -804,7 +841,7 @@
TEE_DATA_FLAG_ACCESS_WRITE |
TEE_DATA_FLAG_ACCESS_READ |
TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
- sizeof(data_00), &obj)))
+ sizeof(data_00), &obj, storage_id)))
goto exit;
/* seek */
@@ -826,8 +863,10 @@
TEEC_CloseSession(&sess);
}
+DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6005)
+
/* unlink */
-static void xtest_tee_test_6006(ADBG_Case_t *c)
+static void xtest_tee_test_6006_single(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t obj;
@@ -841,7 +880,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_create(&sess, file_01, sizeof(file_01),
TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
- sizeof(data_00), &obj)))
+ sizeof(data_00), &obj, storage_id)))
goto exit;
/* del & close */
@@ -851,29 +890,33 @@
/* check result */
if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ITEM_NOT_FOUND,
fs_open(&sess, file_01, sizeof(file_01),
- TEE_DATA_FLAG_ACCESS_READ, &obj)))
+ TEE_DATA_FLAG_ACCESS_READ, &obj, storage_id)))
goto exit;
exit:
TEEC_CloseSession(&sess);
}
-static void xtest_tee_test_6007(ADBG_Case_t *c)
+DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6006)
+
+static void xtest_tee_test_6007_single(ADBG_Case_t *c, uint32_t storage_id)
{
Do_ADBG_BeginSubCase(c, "Test truncate file length");
- test_truncate_file_length(c);
+ test_truncate_file_length(c, storage_id);
Do_ADBG_EndSubCase(c, "Test truncate file length");
Do_ADBG_BeginSubCase(c, "Test extend file length");
- test_extend_file_length(c);
+ test_extend_file_length(c, storage_id);
Do_ADBG_EndSubCase(c, "Test extend file length");
Do_ADBG_BeginSubCase(c, "Test file hole");
- test_file_hole(c);
+ test_file_hole(c, storage_id);
Do_ADBG_EndSubCase(c, "Test file hole");
}
-static void xtest_tee_test_6008(ADBG_Case_t *c)
+DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6007)
+
+static void xtest_tee_test_6008_single(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t obj;
@@ -889,7 +932,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_create(&sess, file_02, sizeof(file_02),
TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
- sizeof(data_01), &obj)))
+ sizeof(data_01), &obj, storage_id)))
goto exit;
if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
@@ -898,7 +941,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_open(&sess, file_02, sizeof(file_02),
TEE_DATA_FLAG_ACCESS_WRITE |
- TEE_DATA_FLAG_ACCESS_WRITE_META, &obj)))
+ TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
goto exit;
/* write new data */
@@ -918,7 +961,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_open(&sess, file_03, sizeof(file_03),
TEE_DATA_FLAG_ACCESS_READ |
- TEE_DATA_FLAG_ACCESS_WRITE_META, &obj)))
+ TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
goto exit;
if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
@@ -935,7 +978,9 @@
TEEC_CloseSession(&sess);
}
-static void xtest_tee_test_6009(ADBG_Case_t *c)
+DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6008)
+
+static void xtest_tee_test_6009_single(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t obj0;
@@ -954,21 +999,21 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_create(&sess, file_00, sizeof(file_00),
TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
- sizeof(data_01), &obj0)))
+ sizeof(data_01), &obj0, storage_id)))
goto exit;
/* create file 01 */
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_create(&sess, file_01, sizeof(file_01),
TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
- sizeof(data_01), &obj1)))
+ sizeof(data_01), &obj1, storage_id)))
goto exit;
/* create file 02 */
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_create(&sess, file_02, sizeof(file_02),
TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
- sizeof(data_01), &obj2)))
+ sizeof(data_01), &obj2, storage_id)))
goto exit;
if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj0)))
@@ -984,7 +1029,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_alloc_enum(&sess, &e)))
goto exit;
- if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_start_enum(&sess, e)))
+ if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_start_enum(&sess, e, storage_id)))
goto exit;
/* get 00 */
@@ -1013,7 +1058,7 @@
/* clean */
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_open(&sess, file_00, sizeof(file_00),
- TEE_DATA_FLAG_ACCESS_WRITE_META, &obj0)))
+ TEE_DATA_FLAG_ACCESS_WRITE_META, &obj0, storage_id)))
goto exit;
if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj0)))
@@ -1021,7 +1066,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_open(&sess, file_01, sizeof(file_01),
- TEE_DATA_FLAG_ACCESS_WRITE_META, &obj1)))
+ TEE_DATA_FLAG_ACCESS_WRITE_META, &obj1, storage_id)))
goto exit;
if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj1)))
@@ -1029,7 +1074,7 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_open(&sess, file_02, sizeof(file_02),
- TEE_DATA_FLAG_ACCESS_WRITE_META, &obj2)))
+ TEE_DATA_FLAG_ACCESS_WRITE_META, &obj2, storage_id)))
goto exit;
if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj2)))
@@ -1039,6 +1084,8 @@
TEEC_CloseSession(&sess);
}
+DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6009)
+
#ifdef WITH_GP_TESTS
static void xtest_tee_test_6010(ADBG_Case_t *c)
{
@@ -1212,7 +1259,7 @@
}
#endif
-static void xtest_tee_test_6012(ADBG_Case_t *c)
+static void xtest_tee_test_6012_single(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t orig;
@@ -1223,7 +1270,7 @@
return;
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
- fs_create_overwrite(&sess, file_04, sizeof(file_04))))
+ fs_create_overwrite(&sess, file_04, sizeof(file_04), storage_id)))
goto exit;
TEEC_CloseSession(&sess);
@@ -1234,7 +1281,8 @@
return;
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
- fs_create_overwrite(&sess, file_04, sizeof(file_04))))
+ fs_create_overwrite(&sess, file_04, sizeof(file_04),
+ storage_id)))
goto exit;
/*
@@ -1244,7 +1292,9 @@
if (!ADBG_EXPECT_TEEC_SUCCESS(c,
fs_create(&sess, file_04, sizeof(file_04),
TEE_DATA_FLAG_ACCESS_WRITE |
- TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_OVERWRITE, 0, NULL, 0, &obj)))
+ TEE_DATA_FLAG_ACCESS_WRITE_META |
+ TEE_DATA_FLAG_OVERWRITE, 0, NULL, 0, &obj,
+ storage_id)))
goto exit;
/* clean */
@@ -1255,7 +1305,9 @@
TEEC_CloseSession(&sess);
}
-static void xtest_tee_test_6013(ADBG_Case_t *c)
+DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6012)
+
+static void xtest_tee_test_6013_single(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t orig;
@@ -1265,7 +1317,8 @@
xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
return;
- op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE,
+ op.params[0].value.a = storage_id;
+ op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
TEEC_NONE, TEEC_NONE);
ADBG_EXPECT_TEEC_SUCCESS(c,
@@ -1275,7 +1328,9 @@
TEEC_CloseSession(&sess);
}
-static void xtest_tee_test_6014(ADBG_Case_t *c)
+DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6013)
+
+static void xtest_tee_test_6014_single(ADBG_Case_t *c, uint32_t storage_id)
{
TEEC_Session sess;
uint32_t orig;
@@ -1285,7 +1340,8 @@
xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
return;
- op.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE,
+ op.params[0].value.a = storage_id;
+ op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
TEEC_NONE, TEEC_NONE);
ADBG_EXPECT_TEEC_SUCCESS(c,
@@ -1294,6 +1350,8 @@
TEEC_CloseSession(&sess);
}
+DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6014)
+
ADBG_CASE_DEFINE(
XTEST_TEE_6001, xtest_tee_test_6001,
/* Title */
diff --git a/ta/storage/storage.c b/ta/storage/storage.c
index db13466..006d6c2 100644
--- a/ta/storage/storage.c
+++ b/ta/storage/storage.c
@@ -45,10 +45,11 @@
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_MEMREF_INPUT,
- TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_VALUE_INOUT,
+ TEE_PARAM_TYPE_VALUE_INPUT,
TEE_PARAM_TYPE_NONE));
- res = TEE_OpenPersistentObject(TEE_STORAGE_PRIVATE,
+ res = TEE_OpenPersistentObject(params[2].value.a,
params[0].memref.buffer,
params[0].memref.size,
params[1].value.a, &o);
@@ -68,7 +69,7 @@
TEE_PARAM_TYPE_VALUE_INPUT,
TEE_PARAM_TYPE_MEMREF_INPUT));
- res = TEE_CreatePersistentObject(TEE_STORAGE_PRIVATE,
+ res = TEE_CreatePersistentObject(params[2].value.b,
params[0].memref.buffer, params[0].memref.size,
params[1].value.a,
(TEE_ObjectHandle)(uintptr_t)params[2].value.a,
@@ -84,11 +85,11 @@
ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
(TEE_PARAM_TYPE_MEMREF_INPUT,
- TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_VALUE_INPUT,
TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE));
- res = TEE_CreatePersistentObject(TEE_STORAGE_PRIVATE,
+ res = TEE_CreatePersistentObject(params[1].value.a,
params[0].memref.buffer, params[0].memref.size,
TEE_DATA_FLAG_OVERWRITE,
NULL, NULL, 0, NULL);
@@ -236,7 +237,7 @@
(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE,
TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE));
- return TEE_StartPersistentObjectEnumerator(oe, TEE_STORAGE_PRIVATE);
+ return TEE_StartPersistentObjectEnumerator(oe, params[0].value.b);
}
TEE_Result ta_storage_cmd_next_enum(uint32_t param_types, TEE_Param params[4])
@@ -304,8 +305,9 @@
TEE_DATA_FLAG_SHARE_READ |
TEE_DATA_FLAG_SHARE_WRITE;
- (void)param_types;
- (void)params;
+ ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
+ (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE));
result = TEE_AllocateTransientObject(TEE_TYPE_AES, key_size,
&transient_key);
@@ -322,7 +324,7 @@
}
TEE_GetObjectInfo1(transient_key, &keyInfo);
- result = TEE_CreatePersistentObject(TEE_STORAGE_PRIVATE,
+ result = TEE_CreatePersistentObject(params[0].value.a,
&objectID, sizeof(objectID),
flags, transient_key, NULL, 0,
&persistent_key);
@@ -340,7 +342,7 @@
TEE_CloseObject(persistent_key);
- result = TEE_OpenPersistentObject(TEE_STORAGE_PRIVATE,
+ result = TEE_OpenPersistentObject(params[0].value.a,
&objectID, sizeof(objectID),
flags, &key);
if (result != TEE_SUCCESS) {
@@ -397,14 +399,16 @@
TEE_DATA_FLAG_ACCESS_WRITE_META;
int i = 0;
- (void)param_types;
(void)params;
+ ASSERT_PARAM_TYPE(TEE_PARAM_TYPES
+ (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE,
+ TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE));
for (i = 0; i < 20; i++) {
DMSG("\n\nLOOP : %d", i);
object = TEE_HANDLE_NULL;
object_id = i;
- res = TEE_CreatePersistentObject(TEE_STORAGE_PRIVATE,
+ res = TEE_CreatePersistentObject(params[0].value.a,
&object_id, sizeof(int), flags,
TEE_HANDLE_NULL, NULL, 0,
&object);