blob: 52def48544a5738351eda11ead31c78209e49e5f [file] [log] [blame]
Pascal Brandc639ac82015-07-02 08:53:34 +02001/*
2 * Copyright (c) 2014, STMicroelectronics International N.V.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include <string.h>
15#include <stdio.h>
Lijianhui (Airbak)29d7c7a2016-08-24 17:35:55 +080016#include <pthread.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020017
18#include <adbg.h>
19#include <xtest_test.h>
20#include <xtest_helpers.h>
21
22#include <tee_client_api.h>
23#include <ta_storage.h>
24#include <tee_api_defines.h>
Jerome Forissier0e99d6a2016-07-25 14:21:43 +020025#include <tee_api_defines_extensions.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020026#include <tee_api_types.h>
Jerome Forissiere3688342015-09-24 10:45:17 -070027#ifdef WITH_GP_TESTS
Pascal Brand8a74e362015-09-10 12:41:52 +020028#include <TTA_DS_protocol.h>
29#endif
Jerome Forissier0e99d6a2016-07-25 14:21:43 +020030#include <util.h>
31
32static uint32_t storage_ids[] = {
33 TEE_STORAGE_PRIVATE,
34#ifdef CFG_REE_FS
35 TEE_STORAGE_PRIVATE_REE,
36#endif
37#ifdef CFG_RPMB_FS
38 TEE_STORAGE_PRIVATE_RPMB,
39#endif
Jerome Forissiera966bb42016-08-16 16:41:47 +020040#ifdef CFG_SQL_FS
41 TEE_STORAGE_PRIVATE_SQL,
42#endif
Jerome Forissier0e99d6a2016-07-25 14:21:43 +020043};
Pascal Brandc639ac82015-07-02 08:53:34 +020044
45static uint8_t file_00[] = {
46 0x00, 0x6E, 0x04, 0x57, 0x08, 0xFB, 0x71, 0x96,
47 0xF0, 0x2E, 0x55, 0x3D, 0x02, 0xC3, 0xA6, 0x92,
48 0xE9, 0xC3, 0xEF, 0x8A, 0xB2, 0x34, 0x53, 0xE6,
49 0xF0, 0x74, 0x9C, 0xD6, 0x36, 0xE7, 0xA8, 0x8E
50};
51
52static uint8_t file_01[] = {
53 0x01, 0x00
54};
55
56static uint8_t file_02[] = {
57 0x02, 0x11, 0x02
58};
59
60static uint8_t file_03[] = {
61 0x03, 0x13, 0x03
62};
63
Pascal Brandeb84c442016-04-19 17:49:49 +020064static uint8_t file_04[] = {
65 0x00, 0x01, 0x02
66};
67
Pascal Brandc639ac82015-07-02 08:53:34 +020068static uint8_t data_00[] = {
69 0x00, 0x6E, 0x04, 0x57, 0x08, 0xFB, 0x71, 0x96,
70 0x00, 0x2E, 0x55, 0x3D, 0x02, 0xC3, 0xA6, 0x92,
71 0x00, 0xC3, 0xEF, 0x8A, 0xB2, 0x34, 0x53, 0xE6,
72 0x00, 0x74, 0x9C, 0xD6, 0x36, 0xE7, 0xA8, 0x00
73};
74
75static uint8_t data_01[] = {
76 0x01, 0x6E, 0x04, 0x57, 0x08, 0xFB, 0x71, 0x96,
77 0x01, 0x2E, 0x55, 0x3D, 0x02, 0xC3, 0xA6, 0x92,
78 0x01, 0xC3, 0xEF, 0x8A, 0xB2, 0x34, 0x53, 0xE6,
79 0x01, 0x74, 0x9C, 0xD6, 0x36, 0xE7, 0xA8, 0x01
80};
81
Jens Wiklanderaba31ba2017-02-15 15:24:06 +010082static uint32_t fs_id_for_tee_storage_private(void)
83{
84#if defined(CFG_REE_FS)
85 return TEE_STORAGE_PRIVATE_REE;
86#elif defined(CFG_RPMB_FS)
87 return TEE_STORAGE_PRIVATE_RPMB;
88#elif defined(CFG_SQL_FS)
89 return TEE_STORAGE_PRIVATE_SQL;
90#endif
91}
92
93static uint32_t real_id_for(uint32_t id)
94{
95 if (id == TEE_STORAGE_PRIVATE)
96 return fs_id_for_tee_storage_private();
97 return id;
98}
99
100static bool storage_is(uint32_t id1, uint32_t id2)
101{
102 return (real_id_for(id1) == real_id_for(id2));
103}
104
Pascal Brandc639ac82015-07-02 08:53:34 +0200105static TEEC_Result fs_open(TEEC_Session *sess, void *id, uint32_t id_size,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200106 uint32_t flags, uint32_t *obj, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200107{
Aijun Sun473d9072015-08-06 15:24:49 +0800108 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200109 TEEC_Result res;
110 uint32_t org;
111
112 op.params[0].tmpref.buffer = id;
113 op.params[0].tmpref.size = id_size;
114 op.params[1].value.a = flags;
115 op.params[1].value.b = 0;
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200116 op.params[2].value.a = storage_id;
Pascal Brandc639ac82015-07-02 08:53:34 +0200117
118 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200119 TEEC_VALUE_INOUT, TEEC_VALUE_INPUT,
Pascal Brandc639ac82015-07-02 08:53:34 +0200120 TEEC_NONE);
121
122 res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_OPEN, &op, &org);
123
124 if (res == TEEC_SUCCESS)
125 *obj = op.params[1].value.b;
126
127 return res;
128}
129
130static TEEC_Result fs_create(TEEC_Session *sess, void *id, uint32_t id_size,
131 uint32_t flags, uint32_t attr, void *data,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200132 uint32_t data_size, uint32_t *obj,
133 uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200134{
Aijun Sun473d9072015-08-06 15:24:49 +0800135 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200136 TEEC_Result res;
137 uint32_t org;
138
139 op.params[0].tmpref.buffer = id;
140 op.params[0].tmpref.size = id_size;
141 op.params[1].value.a = flags;
142 op.params[1].value.b = 0;
143 op.params[2].value.a = attr;
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200144 op.params[2].value.b = storage_id;
Pascal Brandc639ac82015-07-02 08:53:34 +0200145 op.params[3].tmpref.buffer = data;
146 op.params[3].tmpref.size = data_size;
147
148 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
149 TEEC_VALUE_INOUT, TEEC_VALUE_INPUT,
150 TEEC_MEMREF_TEMP_INPUT);
151
152 res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_CREATE, &op, &org);
153
154 if (res == TEEC_SUCCESS)
155 *obj = op.params[1].value.b;
156
157 return res;
158}
159
Pascal Brandeb84c442016-04-19 17:49:49 +0200160static TEEC_Result fs_create_overwrite(TEEC_Session *sess, void *id,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200161 uint32_t id_size, uint32_t storage_id)
Pascal Brandeb84c442016-04-19 17:49:49 +0200162{
163 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
164 TEEC_Result res;
165 uint32_t org;
166
167 op.params[0].tmpref.buffer = id;
168 op.params[0].tmpref.size = id_size;
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200169 op.params[1].value.a = storage_id;
Pascal Brandeb84c442016-04-19 17:49:49 +0200170
171 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200172 TEEC_VALUE_INPUT, TEEC_NONE,
Pascal Brandeb84c442016-04-19 17:49:49 +0200173 TEEC_NONE);
174
175 res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_CREATE_OVERWRITE, &op, &org);
176
177 return res;
178}
179
Pascal Brandc639ac82015-07-02 08:53:34 +0200180static TEEC_Result fs_close(TEEC_Session *sess, uint32_t obj)
181{
Aijun Sun473d9072015-08-06 15:24:49 +0800182 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200183 uint32_t org;
184
185 op.params[0].value.a = obj;
186
187 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
188 TEEC_NONE, TEEC_NONE);
189
190 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_CLOSE, &op, &org);
191}
192
193static TEEC_Result fs_read(TEEC_Session *sess, uint32_t obj, void *data,
194 uint32_t data_size, uint32_t *count)
195{
196 TEEC_Result res;
Aijun Sun473d9072015-08-06 15:24:49 +0800197 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200198 uint32_t org;
199
200 op.params[0].tmpref.buffer = data;
201 op.params[0].tmpref.size = data_size;
202 op.params[1].value.a = obj;
203 op.params[1].value.b = 0;
204
205 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT,
206 TEEC_VALUE_INOUT, TEEC_NONE,
207 TEEC_NONE);
208
209 res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_READ, &op, &org);
210
211 if (res == TEEC_SUCCESS)
212 *count = op.params[1].value.b;
213
214 return res;
215}
216
217static TEEC_Result fs_write(TEEC_Session *sess, uint32_t obj, void *data,
218 uint32_t data_size)
219{
Aijun Sun473d9072015-08-06 15:24:49 +0800220 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200221 uint32_t org;
222
223 op.params[0].tmpref.buffer = data;
224 op.params[0].tmpref.size = data_size;
225 op.params[1].value.a = obj;
226 op.params[1].value.b = 0;
227
228 op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
229 TEEC_VALUE_INPUT, TEEC_NONE,
230 TEEC_NONE);
231
232 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_WRITE, &op, &org);
233}
234
235static TEEC_Result fs_seek(TEEC_Session *sess, uint32_t obj, int32_t offset,
236 int32_t whence)
237{
Aijun Sun473d9072015-08-06 15:24:49 +0800238 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200239 uint32_t org;
240
241 op.params[0].value.a = obj;
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +0200242 op.params[0].value.b = *(uint32_t *)&offset;
Pascal Brandc639ac82015-07-02 08:53:34 +0200243 op.params[1].value.a = whence;
244
245 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INOUT,
246 TEEC_NONE, TEEC_NONE);
247
248 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_SEEK, &op, &org);
249}
250
251static TEEC_Result fs_unlink(TEEC_Session *sess, uint32_t obj)
252{
Aijun Sun473d9072015-08-06 15:24:49 +0800253 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200254 uint32_t org;
255
256 op.params[0].value.a = obj;
257
258 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
259 TEEC_NONE, TEEC_NONE);
260
261 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_UNLINK, &op, &org);
262}
263
264static TEEC_Result fs_trunc(TEEC_Session *sess, uint32_t obj, uint32_t len)
265{
Aijun Sun473d9072015-08-06 15:24:49 +0800266 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200267 uint32_t org;
268
269 op.params[0].value.a = obj;
270 op.params[0].value.b = len;
271
272 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
273 TEEC_NONE, TEEC_NONE);
274
275 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_TRUNC, &op, &org);
276}
277
278static TEEC_Result fs_rename(TEEC_Session *sess, uint32_t obj, void *id,
279 uint32_t id_size)
280{
Aijun Sun473d9072015-08-06 15:24:49 +0800281 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200282 uint32_t org;
283
284 op.params[0].value.a = obj;
285 op.params[1].tmpref.buffer = id;
286 op.params[1].tmpref.size = id_size;
287
288 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
289 TEEC_MEMREF_TEMP_INPUT, TEEC_NONE,
290 TEEC_NONE);
291
292 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_RENAME, &op, &org);
293}
294
295static TEEC_Result fs_alloc_enum(TEEC_Session *sess, uint32_t *e)
296{
297 TEEC_Result res;
Aijun Sun473d9072015-08-06 15:24:49 +0800298 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200299 uint32_t org;
300
301 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_OUTPUT, TEEC_NONE,
302 TEEC_NONE, TEEC_NONE);
303
304 res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_ALLOC_ENUM, &op, &org);
305
306 if (res == TEEC_SUCCESS)
307 *e = op.params[0].value.a;
308
309 return res;
310}
311
312static TEEC_Result fs_free_enum(TEEC_Session *sess, uint32_t e)
313{
Aijun Sun473d9072015-08-06 15:24:49 +0800314 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200315 uint32_t org;
316
317 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE,
318 TEEC_NONE);
319
320 op.params[0].value.a = e;
321
322 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_FREE_ENUM, &op, &org);
323}
324
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200325static TEEC_Result fs_start_enum(TEEC_Session *sess, uint32_t e,
326 uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200327{
Aijun Sun473d9072015-08-06 15:24:49 +0800328 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200329 uint32_t org;
330
331 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
332 TEEC_NONE, TEEC_NONE);
333
334 op.params[0].value.a = e;
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200335 op.params[0].value.b = storage_id;
Pascal Brandc639ac82015-07-02 08:53:34 +0200336
337 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_START_ENUM, &op, &org);
338}
339
340static TEEC_Result fs_next_enum(TEEC_Session *sess, uint32_t e, void *obj_info,
341 size_t info_size, void *id, uint32_t id_size)
342{
Aijun Sun473d9072015-08-06 15:24:49 +0800343 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
Pascal Brandc639ac82015-07-02 08:53:34 +0200344 uint32_t org;
345
Pascal Brandc603e0d2016-04-25 12:37:18 +0200346 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
Pascal Brandc639ac82015-07-02 08:53:34 +0200347 TEEC_MEMREF_TEMP_OUTPUT, TEEC_NONE);
Pascal Brandc603e0d2016-04-25 12:37:18 +0200348 if (obj_info && info_size)
349 op.paramTypes |= (TEEC_MEMREF_TEMP_OUTPUT << 4);
Pascal Brandc639ac82015-07-02 08:53:34 +0200350
351 op.params[0].value.a = e;
352 op.params[1].tmpref.buffer = obj_info;
353 op.params[1].tmpref.size = info_size;
354 op.params[2].tmpref.buffer = id;
355 op.params[2].tmpref.size = id_size;
356
357 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_NEXT_ENUM, &op, &org);
358}
359
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +0200360static TEEC_Result fs_restrict_usage(TEEC_Session *sess, uint32_t obj,
361 uint32_t obj_usage)
362{
363 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
364 uint32_t org;
365
366 op.params[0].value.a = obj;
367 op.params[0].value.b = obj_usage;
368
369 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
370 TEEC_NONE, TEEC_NONE);
371
372 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_RESTRICT_USAGE,
373 &op, &org);
374}
375
376static TEEC_Result fs_alloc_obj(TEEC_Session *sess, uint32_t obj_type,
377 uint32_t max_key_size, uint32_t *obj)
378{
379 TEEC_Result res;
380 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
381 uint32_t org;
382
383 op.params[0].value.a = obj_type;
384 op.params[0].value.b = max_key_size;
385
386 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT,
387 TEEC_NONE, TEEC_NONE);
388
389 res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_ALLOC_OBJ, &op, &org);
390 *obj = op.params[1].value.a;
391 return res;
392}
393
394static TEEC_Result fs_free_obj(TEEC_Session *sess, uint32_t obj)
395{
396 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
397 uint32_t org;
398
399 op.params[0].value.a = obj;
400
401 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
402 TEEC_NONE, TEEC_NONE);
403
404 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_FREE_OBJ, &op, &org);
405}
406
407static TEEC_Result fs_reset_obj(TEEC_Session *sess, uint32_t obj)
408{
409 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
410 uint32_t org;
411
412 op.params[0].value.a = obj;
413
414 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
415 TEEC_NONE, TEEC_NONE);
416
417 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_RESET_OBJ, &op, &org);
418}
419
Guanchao Liang31a9cbf2016-12-20 00:35:26 +0800420static TEEC_Result fs_get_obj_info(TEEC_Session *sess, uint32_t obj,
421 void *obj_info, size_t info_size)
422{
423 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
424 uint32_t org;
425
426 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT,
427 TEEC_MEMREF_TEMP_OUTPUT,
428 TEEC_NONE, TEEC_NONE);
429
430 op.params[0].value.a = obj;
431 op.params[1].tmpref.buffer = obj_info;
432 op.params[1].tmpref.size = info_size;
433
434 return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_GET_OBJ_INFO, &op, &org);
435}
436
James Kung98c0ba12015-09-09 15:51:59 +0800437/* trunc */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200438static void test_truncate_file_length(ADBG_Case_t *c, uint32_t storage_id)
James Kung98c0ba12015-09-09 15:51:59 +0800439{
440 TEEC_Session sess;
441 uint32_t obj;
442 uint8_t out[10] = { 0 };
443 uint32_t count;
444 uint32_t orig;
445
446 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
447 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
448 return;
449
450 /* create */
451 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
452 fs_create(&sess, file_01, sizeof(file_01),
453 TEE_DATA_FLAG_ACCESS_WRITE |
454 TEE_DATA_FLAG_ACCESS_READ |
455 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200456 sizeof(data_00), &obj, storage_id)))
James Kung98c0ba12015-09-09 15:51:59 +0800457 goto exit;
458
459 /* trunc */
460 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_trunc(&sess, obj, 10)))
461 goto exit;
462
463 /* seek */
464 if (!ADBG_EXPECT_TEEC_SUCCESS(
465 c, fs_seek(&sess, obj, 5, TEE_DATA_SEEK_SET)))
466 goto exit;
467
468 /* verify */
469 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
470 goto exit;
471
472 /* check buffer */
473 (void)ADBG_EXPECT_BUFFER(c, &data_00[5], 5, out, count);
474
475 /* clean */
476 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
477 goto exit;
478
479exit:
480 TEEC_CloseSession(&sess);
481}
482
483/* extend */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200484static void test_extend_file_length(ADBG_Case_t *c, uint32_t storage_id)
James Kung98c0ba12015-09-09 15:51:59 +0800485{
486 TEEC_Session sess;
487 uint32_t obj;
488 uint8_t out[10] = { 0 };
489 uint8_t expect[10] = { 0 };
490 uint32_t count;
491 uint32_t orig;
492
493 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
494 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
495 return;
496
497 /* create */
498 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
499 fs_create(&sess, file_01, sizeof(file_01),
500 TEE_DATA_FLAG_ACCESS_WRITE |
501 TEE_DATA_FLAG_ACCESS_READ |
502 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200503 sizeof(data_00), &obj, storage_id)))
James Kung98c0ba12015-09-09 15:51:59 +0800504 goto exit;
505
506 /* extend */
507 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_trunc(&sess, obj, 40)))
508 goto exit;
509
510 /* seek */
511 if (!ADBG_EXPECT_TEEC_SUCCESS(
512 c, fs_seek(&sess, obj, 30, TEE_DATA_SEEK_SET)))
513 goto exit;
514
515 /* verify */
516 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
517 goto exit;
518
519 /* check buffer */
520 expect[0] = data_00[30];
521 expect[1] = data_00[31];
522 (void)ADBG_EXPECT_BUFFER(c, &expect[0], 10, out, count);
523
524 /* clean */
525 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
526 goto exit;
527
528exit:
529 TEEC_CloseSession(&sess);
530}
531
532/* file hole */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200533static void test_file_hole(ADBG_Case_t *c, uint32_t storage_id)
James Kung98c0ba12015-09-09 15:51:59 +0800534{
535 TEEC_Session sess;
536 uint32_t obj;
537 uint8_t out[10] = { 0 };
538 uint8_t expect[10] = { 0 };
539 uint32_t count;
540 uint32_t orig;
541
542 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
543 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
544 return;
545
546 /* create */
547 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
548 fs_create(&sess, file_01, sizeof(file_01),
549 TEE_DATA_FLAG_ACCESS_WRITE |
550 TEE_DATA_FLAG_ACCESS_READ |
551 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200552 sizeof(data_00), &obj, storage_id)))
James Kung98c0ba12015-09-09 15:51:59 +0800553 goto exit;
554
555 /* seek */
556 if (!ADBG_EXPECT_TEEC_SUCCESS(
557 c, fs_seek(&sess, obj, 80, TEE_DATA_SEEK_SET)))
558 goto exit;
559
560 /* write */
561 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_write(&sess, obj, data_00,
562 sizeof(data_00))))
563 goto exit;
564
565 /* seek */
566 if (!ADBG_EXPECT_TEEC_SUCCESS(
567 c, fs_seek(&sess, obj, 74, TEE_DATA_SEEK_SET)))
568 goto exit;
569
570 /* verify */
571 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
572 goto exit;
573
574 /* check buffer */
575 expect[6] = data_00[0];
576 expect[7] = data_00[1];
577 expect[8] = data_00[2];
578 expect[9] = data_00[3];
579 (void)ADBG_EXPECT_BUFFER(c, &expect[0], 10, out, count);
580
581 /* clean */
582 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
583 goto exit;
584
585exit:
586 TEEC_CloseSession(&sess);
587}
588
Jerome Forissiere3688342015-09-24 10:45:17 -0700589#ifdef WITH_GP_TESTS
Pascal Brand8a74e362015-09-10 12:41:52 +0200590static TEEC_Result ds_seek_obj_inv_handle(TEEC_Session *sess)
591{
592 TEEC_Operation op;
593 uint32_t org;
594
595 op.paramTypes = TEEC_PARAM_TYPES(
596 TEEC_VALUE_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
597
598 op.params[0].value.a = CASE_DATA_OBJECT_NOT_PERSISTENT;
599
600 return TEEC_InvokeCommand(
601 sess, CMD_SeekObjectData_panic, &op, &org);
602}
603
Pascal Brand8a74e362015-09-10 12:41:52 +0200604static TEEC_Result ds_seek_gp(
605 TEEC_Session *sess, TEE_Whence wh, uint32_t wh_off, uint32_t set_off,
606 void *in, size_t in_size, void *out, size_t out_size)
607{
608 TEEC_Operation op;
609 uint32_t org;
610
611 op.paramTypes = TEEC_PARAM_TYPES(
612 TEEC_VALUE_INPUT, TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT,
613 TEEC_MEMREF_TEMP_OUTPUT);
614
615 op.params[0].value.a = wh;
616 op.params[0].value.b = wh_off;
617 op.params[1].value.a = set_off;
618 op.params[2].tmpref.buffer = in;
619 op.params[2].tmpref.size = in_size;
620 op.params[3].tmpref.buffer = out;
621 op.params[3].tmpref.size = out_size;
622
623 return TEEC_InvokeCommand(sess, CMD_SeekWriteReadObjectData, &op, &org);
624}
625
626static TEEC_Result ds_init_object_and_attributes(TEEC_Session *sess,
627 uint32_t obj_type, uint32_t obj_size, const void *attr_meta,
628 size_t attr_meta_len, const void *attr_data, size_t attr_data_len,
629 uint32_t option)
630{
631 TEEC_Operation op;
632 uint32_t org;
633
634 op.paramTypes = TEEC_PARAM_TYPES(
635 TEEC_VALUE_INPUT, TEEC_MEMREF_TEMP_INPUT,
636 TEEC_MEMREF_TEMP_INPUT, TEEC_VALUE_INPUT);
637
638 op.params[0].value.a = obj_type;
639 op.params[0].value.b = obj_size;
640 op.params[1].tmpref.buffer = (void *)attr_meta;
641 op.params[1].tmpref.size = attr_meta_len;
642 op.params[2].tmpref.buffer = (void *)attr_data;
643 op.params[2].tmpref.size = attr_data_len;
644 op.params[3].value.a = option;
645
646 return TEEC_InvokeCommand(sess, CMD_InitObjectAndAttributes, &op, &org);
647}
648
649static TEEC_Result ds_rename_access_conflict(TEEC_Session *sess)
650{
651 TEEC_Operation op;
652 uint32_t org;
653
654 op.paramTypes = TEEC_PARAM_TYPES(
655 TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
656
657 return TEEC_InvokeCommand(
658 sess, CMD_RenamePersistentObject_AccessConflict, &op, &org);
659}
660
661static TEEC_Result ds_start_enum_no_item(TEEC_Session *sess)
662{
663 TEEC_Operation op;
664 uint32_t org;
665 TEEC_Result res;
666
667 op.paramTypes = TEEC_PARAM_TYPES(
668 TEEC_VALUE_OUTPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
669
670 res = TEEC_InvokeCommand(
671 sess, CMD_StartNGetPersistentObjectEnumerator_itemNotFound, &op, &org);
672
673 if (res != TEEC_SUCCESS)
674 return res;
675
676 if (op.params[0].value.a != 0 || op.params[0].value.b != 0)
677 return TEEC_ERROR_GENERIC;
678
679 return res;
680}
681
682static TEEC_Result ds_rename_success(TEEC_Session *sess)
683{
684 TEEC_Operation op;
685 uint32_t org;
686
687 op.paramTypes = TEEC_PARAM_TYPES(
688 TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
689
690 return TEEC_InvokeCommand(
691 sess, CMD_RenamePersistentObject_Success, &op, &org);
692}
693
694static TEEC_Result ds_null_close_free_reset(TEEC_Session *sess)
695{
696 TEEC_Operation op;
697 uint32_t org;
698
699 op.paramTypes = TEEC_PARAM_TYPES(
700 TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
701
702 return TEEC_InvokeCommand(
703 sess, CMD_CloseFreeAndResetObjectSuccessHandleNull, &op, &org);
704}
705#endif
706
Pascal Brandc639ac82015-07-02 08:53:34 +0200707/* create */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200708static void xtest_tee_test_6001_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200709{
710 TEEC_Session sess;
711 uint32_t obj;
712 uint32_t orig;
713
714 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
715 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
716 return;
717
718 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
719 fs_create(&sess, file_00, sizeof(file_00),
720 TEE_DATA_FLAG_ACCESS_WRITE |
721 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200722 sizeof(data_00), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200723 goto exit;
724
725 /* clean */
726 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
727 goto exit;
728
729exit:
730 TEEC_CloseSession(&sess);
731}
732
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200733#define DEFINE_TEST_MULTIPLE_STORAGE_IDS(test_name) \
734static void test_name(ADBG_Case_t *c) \
735{ \
736 size_t i; \
737 \
738 for (i = 0; i < ARRAY_SIZE(storage_ids); i++) { \
739 Do_ADBG_BeginSubCase(c, "Storage id: %08x", storage_ids[i]); \
740 test_name##_single(c, storage_ids[i]); \
741 Do_ADBG_EndSubCase(c, "Storage id: %08x", storage_ids[i]); \
742 } \
743}
744
745DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6001)
746
Pascal Brandc639ac82015-07-02 08:53:34 +0200747/* open */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200748static void xtest_tee_test_6002_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200749{
750 TEEC_Session sess;
751 uint32_t obj;
752 uint32_t orig;
753
754 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
755 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
756 return;
757
758 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
759 fs_create(&sess, file_01, sizeof(file_01),
760 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200761 sizeof(data_00), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200762 goto exit;
763
764 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
765 goto exit;
766
767 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
768 fs_open(&sess, file_01, sizeof(file_01),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200769 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200770 goto exit;
771
772 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
773 goto exit;
774
775 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
776 fs_open(&sess, file_01, sizeof(file_01),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200777 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200778 goto exit;
779
780 /* clean */
781 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
782 goto exit;
783
784exit:
785 TEEC_CloseSession(&sess);
786}
787
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200788DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6002)
789
Pascal Brandc639ac82015-07-02 08:53:34 +0200790/* read */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200791static void xtest_tee_test_6003_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200792{
793 TEEC_Session sess;
794 uint32_t obj;
795 uint8_t out[10] = { 0 };
796 uint32_t count;
797 uint32_t orig;
798
799 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
800 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
801 return;
802
803 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
804 fs_create(&sess, file_02, sizeof(file_02),
805 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200806 sizeof(data_01), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200807 goto exit;
808
809 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
810 goto exit;
811
812 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
813 fs_open(&sess, file_02, sizeof(file_02),
814 TEE_DATA_FLAG_ACCESS_READ |
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200815 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200816 goto exit;
817
818 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
819 goto exit;
820
821 (void)ADBG_EXPECT_BUFFER(c, data_01, 10, out, count);
822
823 /* clean */
824 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
825 goto exit;
826
827exit:
828 TEEC_CloseSession(&sess);
829}
830
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200831DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6003)
832
Pascal Brandc639ac82015-07-02 08:53:34 +0200833/* write */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200834static void xtest_tee_test_6004_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200835{
836 TEEC_Session sess;
837 uint32_t obj;
838 uint8_t out[10] = { 0 };
839 uint32_t count;
840 uint32_t orig;
841
842 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
843 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
844 return;
845
846 /* create */
847 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
848 fs_create(&sess, file_02, sizeof(file_02),
849 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200850 sizeof(data_01), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200851 goto exit;
852
853 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
854 goto exit;
855
856 /* write new data */
857 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
858 fs_open(&sess, file_02, sizeof(file_02),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200859 TEE_DATA_FLAG_ACCESS_WRITE, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200860 goto exit;
861
862 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
863 fs_write(&sess, obj, data_00, sizeof(data_00))))
864 goto exit;
865
866 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
867 goto exit;
868
869 /* verify */
870 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
871 fs_open(&sess, file_02, sizeof(file_02),
872 TEE_DATA_FLAG_ACCESS_READ |
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200873 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200874 goto exit;
875
876 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
877 goto exit;
878
879 (void)ADBG_EXPECT_BUFFER(c, data_00, 10, out, count);
880
881 /* clean */
882 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
883 goto exit;
884
885exit:
886 TEEC_CloseSession(&sess);
887}
888
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200889DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6004)
890
Pascal Brandc639ac82015-07-02 08:53:34 +0200891/* seek */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200892static void xtest_tee_test_6005_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200893{
894 TEEC_Session sess;
895 uint32_t obj;
896 uint8_t out[10] = { 0 };
897 uint32_t count;
898 uint32_t orig;
899
900 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
901 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
902 return;
903
904 /* create */
905 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
906 fs_create(&sess, file_01, sizeof(file_01),
907 TEE_DATA_FLAG_ACCESS_WRITE |
908 TEE_DATA_FLAG_ACCESS_READ |
909 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200910 sizeof(data_00), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200911 goto exit;
912
913 /* seek */
914 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
915 fs_seek(&sess, obj, 10, TEE_DATA_SEEK_SET)))
916 goto exit;
917
918 /* verify */
919 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
920 goto exit;
921
922 (void)ADBG_EXPECT_BUFFER(c, &data_00[10], 10, out, count);
923
924 /* clean */
925 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
926 goto exit;
927
928exit:
929 TEEC_CloseSession(&sess);
930}
931
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200932DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6005)
933
Pascal Brandc639ac82015-07-02 08:53:34 +0200934/* unlink */
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200935static void xtest_tee_test_6006_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200936{
937 TEEC_Session sess;
938 uint32_t obj;
939 uint32_t orig;
940
941 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
942 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
943 return;
944
945 /* create */
946 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
947 fs_create(&sess, file_01, sizeof(file_01),
948 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200949 sizeof(data_00), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200950 goto exit;
951
952 /* del & close */
953 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
954 goto exit;
955
956 /* check result */
957 if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ITEM_NOT_FOUND,
958 fs_open(&sess, file_01, sizeof(file_01),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200959 TEE_DATA_FLAG_ACCESS_READ, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +0200960 goto exit;
961
962exit:
963 TEEC_CloseSession(&sess);
964}
965
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200966DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6006)
967
968static void xtest_tee_test_6007_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200969{
James Kung98c0ba12015-09-09 15:51:59 +0800970 Do_ADBG_BeginSubCase(c, "Test truncate file length");
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200971 test_truncate_file_length(c, storage_id);
James Kung98c0ba12015-09-09 15:51:59 +0800972 Do_ADBG_EndSubCase(c, "Test truncate file length");
Pascal Brandc639ac82015-07-02 08:53:34 +0200973
James Kung98c0ba12015-09-09 15:51:59 +0800974 Do_ADBG_BeginSubCase(c, "Test extend file length");
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200975 test_extend_file_length(c, storage_id);
James Kung98c0ba12015-09-09 15:51:59 +0800976 Do_ADBG_EndSubCase(c, "Test extend file length");
Pascal Brandc639ac82015-07-02 08:53:34 +0200977
James Kung98c0ba12015-09-09 15:51:59 +0800978 Do_ADBG_BeginSubCase(c, "Test file hole");
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200979 test_file_hole(c, storage_id);
James Kung98c0ba12015-09-09 15:51:59 +0800980 Do_ADBG_EndSubCase(c, "Test file hole");
Pascal Brandc639ac82015-07-02 08:53:34 +0200981}
982
Jerome Forissier0e99d6a2016-07-25 14:21:43 +0200983DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6007)
984
985static void xtest_tee_test_6008_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +0200986{
987 TEEC_Session sess;
988 uint32_t obj;
989 uint8_t out[10] = { 0 };
990 uint32_t count;
991 uint32_t orig;
992
993 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
994 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
995 return;
996
997 /* create */
998 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
999 fs_create(&sess, file_02, sizeof(file_02),
1000 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001001 sizeof(data_01), &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001002 goto exit;
1003
1004 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
1005 goto exit;
1006
1007 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1008 fs_open(&sess, file_02, sizeof(file_02),
1009 TEE_DATA_FLAG_ACCESS_WRITE |
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001010 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001011 goto exit;
1012
1013 /* write new data */
1014 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1015 fs_write(&sess, obj, data_00, sizeof(data_00))))
1016 goto exit;
1017
1018 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1019 fs_rename(&sess, obj, file_03, sizeof(file_03))))
1020 goto exit;
1021
1022 /* close */
1023 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
1024 goto exit;
1025
1026 /* verify */
1027 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1028 fs_open(&sess, file_03, sizeof(file_03),
1029 TEE_DATA_FLAG_ACCESS_READ |
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001030 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001031 goto exit;
1032
1033 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_read(&sess, obj, out, 10, &count)))
1034 goto exit;
1035
1036 /* check buffer */
1037 (void)ADBG_EXPECT_BUFFER(c, data_00, 10, out, count);
1038
1039 /* clean */
1040 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
1041 goto exit;
1042
1043exit:
1044 TEEC_CloseSession(&sess);
1045}
1046
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001047DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6008)
1048
1049static void xtest_tee_test_6009_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandc639ac82015-07-02 08:53:34 +02001050{
1051 TEEC_Session sess;
1052 uint32_t obj0;
1053 uint32_t obj1;
1054 uint32_t obj2;
1055 uint32_t e = 0;
1056 uint8_t info[200];
1057 uint8_t id[200];
1058 uint32_t orig;
1059
1060 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1061 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1062 return;
1063
1064 /* create file 00 */
1065 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1066 fs_create(&sess, file_00, sizeof(file_00),
1067 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001068 sizeof(data_01), &obj0, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001069 goto exit;
1070
1071 /* create file 01 */
1072 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1073 fs_create(&sess, file_01, sizeof(file_01),
1074 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001075 sizeof(data_01), &obj1, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001076 goto exit;
1077
1078 /* create file 02 */
1079 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1080 fs_create(&sess, file_02, sizeof(file_02),
1081 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001082 sizeof(data_01), &obj2, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001083 goto exit;
1084
1085 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj0)))
1086 goto exit;
1087
1088 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj1)))
1089 goto exit;
1090
1091 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj2)))
1092 goto exit;
1093
1094 /* iterate */
1095 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_alloc_enum(&sess, &e)))
1096 goto exit;
1097
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001098 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_start_enum(&sess, e, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001099 goto exit;
1100
1101 /* get 00 */
1102 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1103 fs_next_enum(&sess, e, info, sizeof(info), id, sizeof(id))))
1104 goto exit;
1105
1106 /* get 01 */
1107 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
Pascal Brandc603e0d2016-04-25 12:37:18 +02001108 fs_next_enum(&sess, e, NULL, 0, id, sizeof(id))))
Pascal Brandc639ac82015-07-02 08:53:34 +02001109 goto exit;
1110
1111 /* get 02 */
1112 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1113 fs_next_enum(&sess, e, info, sizeof(info), id, sizeof(id))))
1114 goto exit;
1115
1116 /* we should not have more files */
1117 if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ITEM_NOT_FOUND,
1118 fs_next_enum(&sess, e, info, sizeof(info), id, sizeof(id))))
1119 goto exit;
1120
1121 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_free_enum(&sess, e)))
1122 goto exit;
1123
1124 /* clean */
1125 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1126 fs_open(&sess, file_00, sizeof(file_00),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001127 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj0, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001128 goto exit;
1129
1130 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj0)))
1131 goto exit;
1132
1133 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1134 fs_open(&sess, file_01, sizeof(file_01),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001135 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj1, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001136 goto exit;
1137
1138 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj1)))
1139 goto exit;
1140
1141 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1142 fs_open(&sess, file_02, sizeof(file_02),
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001143 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj2, storage_id)))
Pascal Brandc639ac82015-07-02 08:53:34 +02001144 goto exit;
1145
1146 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj2)))
1147 goto exit;
1148
1149exit:
1150 TEEC_CloseSession(&sess);
1151}
1152
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001153DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6009)
1154
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001155static void xtest_tee_test_6010_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brand8a74e362015-09-10 12:41:52 +02001156{
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001157 TEEC_Session sess;
1158 uint32_t orig;
1159 uint32_t o1;
1160 uint32_t o2;
1161 uint32_t e;
1162 uint32_t f;
1163 uint8_t data[1024];
1164 uint8_t out[1024];
1165 uint32_t n;
Pascal Brand30844922015-09-17 12:12:42 +02001166
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001167 for (n = 0; n < ARRAY_SIZE(data); n++)
1168 data[n] = n;
Pascal Brand8a74e362015-09-10 12:41:52 +02001169
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001170 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1171 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1172 return;
Pascal Brand8a74e362015-09-10 12:41:52 +02001173
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001174 Do_ADBG_BeginSubCase(c, "CreatePersistentObject AccessConflict");
Pascal Brand8a74e362015-09-10 12:41:52 +02001175
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001176 o1 = TEE_HANDLE_NULL;
1177 o2 = TEE_HANDLE_NULL;
1178 f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE |
1179 TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ |
1180 TEE_DATA_FLAG_SHARE_WRITE | TEE_DATA_FLAG_OVERWRITE;
Pascal Brand8a74e362015-09-10 12:41:52 +02001181
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001182 ADBG_EXPECT_TEEC_SUCCESS(c,
1183 fs_create(&sess, file_00, sizeof(file_00), f, 0, data,
1184 sizeof(data), &o1, storage_id));
Pascal Brand8a74e362015-09-10 12:41:52 +02001185
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001186 f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE;
1187 ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ACCESS_CONFLICT,
1188 fs_create(&sess, file_00, sizeof(file_00), f, 0, data,
1189 sizeof(data), &o2, storage_id));
Pascal Brand8a74e362015-09-10 12:41:52 +02001190
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001191 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o1));
1192 if (o2)
1193 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o2));
Pascal Brand8a74e362015-09-10 12:41:52 +02001194
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001195 Do_ADBG_EndSubCase(c, "CreatePersistentObject AccessConflict");
Pascal Brand8a74e362015-09-10 12:41:52 +02001196
Pascal Brand8a74e362015-09-10 12:41:52 +02001197
Pascal Brand8a74e362015-09-10 12:41:52 +02001198
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001199 Do_ADBG_BeginSubCase(c, "RestrictObjectUsage Panic");
1200 ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_TARGET_DEAD,
1201 fs_restrict_usage(&sess, 0xffffbad0, 0xffffffff));
1202 Do_ADBG_EndSubCase(c, "RestrictObjectUsage Panic");
Pascal Brand8a74e362015-09-10 12:41:52 +02001203
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001204 TEEC_CloseSession(&sess);
1205 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1206 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1207 return;
Pascal Brand8a74e362015-09-10 12:41:52 +02001208
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001209 Do_ADBG_BeginSubCase(c, "SeekObjectData BadHandle");
1210 ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_TARGET_DEAD,
1211 fs_seek(&sess, 0xffffbad0, 5, TEE_DATA_SEEK_SET));
1212 Do_ADBG_EndSubCase(c, "SeekObjectData BadHandle");
Pascal Brand8a74e362015-09-10 12:41:52 +02001213
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001214 TEEC_CloseSession(&sess);
1215 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1216 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1217 return;
Pascal Brand8a74e362015-09-10 12:41:52 +02001218
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001219 Do_ADBG_BeginSubCase(c, "SeekObjectData NotPersist");
1220 o1 = 0;
1221 ADBG_EXPECT_TEEC_SUCCESS(c,
1222 fs_alloc_obj(&sess, TEE_TYPE_AES, 256, &o1));
1223 ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_TARGET_DEAD,
1224 fs_seek(&sess, o1, 5, TEE_DATA_SEEK_SET));
1225 Do_ADBG_EndSubCase(c, "SeekObjectData NotPersist");
Pascal Brand8a74e362015-09-10 12:41:52 +02001226
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001227 TEEC_CloseSession(&sess);
1228 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1229 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1230 return;
Pascal Brand8a74e362015-09-10 12:41:52 +02001231
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001232 Do_ADBG_BeginSubCase(c, "SeekWriteRead");
1233 o1 = 0;
1234 f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE |
1235 TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ |
1236 TEE_DATA_FLAG_SHARE_WRITE | TEE_DATA_FLAG_OVERWRITE;
1237 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1238 fs_create(&sess, file_00, sizeof(file_00), f, 0, data,
1239 sizeof(data), &o1, storage_id)))
1240 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001241
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001242 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1243 fs_seek(&sess, o1, 2, TEE_DATA_SEEK_SET)))
1244 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001245
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001246 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1247 fs_seek(&sess, o1, 0, TEE_DATA_SEEK_END)))
1248 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001249
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001250 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1251 fs_write(&sess, o1, data, sizeof(data))))
1252 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001253
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001254 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1255 fs_seek(&sess, o1, sizeof(data), TEE_DATA_SEEK_SET)))
1256 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001257
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001258 memset(out, 0xab, sizeof(out));
1259 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1260 fs_read(&sess, o1, out, sizeof(out), &n)))
1261 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001262
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001263 ADBG_EXPECT_BUFFER(c, data, sizeof(data), out, n);
Pascal Brand8a74e362015-09-10 12:41:52 +02001264
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001265 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
Jens Wiklander3a6892e2016-09-14 15:53:52 +02001266 fs_seek(&sess, o1, 10, TEE_DATA_SEEK_END)))
1267 goto seek_write_read_out;
1268
1269 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1270 fs_read(&sess, o1, out, sizeof(out), &n)))
1271 goto seek_write_read_out;
1272 ADBG_EXPECT_COMPARE_UNSIGNED(c, n, ==, 0);
1273
1274 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001275 fs_seek(&sess, o1, -(int32_t)sizeof(data) / 2,
1276 TEE_DATA_SEEK_END)))
1277 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001278
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001279 memset(out, 0xab, sizeof(out) / 2);
1280 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1281 fs_read(&sess, o1, out, sizeof(out) / 2, &n)))
1282 goto seek_write_read_out;
Pascal Brand8a74e362015-09-10 12:41:52 +02001283
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001284 ADBG_EXPECT_BUFFER(c,
1285 data + sizeof(data) / 2, sizeof(data) / 2,
1286 out + sizeof(data) / 2, n);
Pascal Brand8a74e362015-09-10 12:41:52 +02001287
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001288seek_write_read_out:
1289 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o1));
1290 Do_ADBG_EndSubCase(c, "SeekWriteRead");
Pascal Brand8a74e362015-09-10 12:41:52 +02001291
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001292 Do_ADBG_BeginSubCase(c, "Rename Access Conflict");
Pascal Brand8a74e362015-09-10 12:41:52 +02001293
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001294 o1 = TEE_HANDLE_NULL;
1295 o2 = TEE_HANDLE_NULL;
1296 f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE |
1297 TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ |
1298 TEE_DATA_FLAG_SHARE_WRITE | TEE_DATA_FLAG_OVERWRITE;
1299 ADBG_EXPECT_TEEC_SUCCESS(c,
1300 fs_create(&sess, file_00, sizeof(file_00), f, 0, data,
1301 sizeof(data), &o1, storage_id));
1302 ADBG_EXPECT_TEEC_SUCCESS(c,
1303 fs_create(&sess, file_01, sizeof(file_01), f, 0, data,
1304 sizeof(data) / 2, &o2, storage_id));
Pascal Brand8a74e362015-09-10 12:41:52 +02001305
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001306 ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_ACCESS_CONFLICT,
1307 fs_rename(&sess, o2, file_00, sizeof(file_00)));
Pascal Brand8a74e362015-09-10 12:41:52 +02001308
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001309 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o1));
1310 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o2));
1311
1312 Do_ADBG_EndSubCase(c, "Rename Access Conflict");
1313
1314 Do_ADBG_BeginSubCase(c, "StartPersistentObjectEnumerator ItemNotFound");
1315 e = TEE_HANDLE_NULL;
1316 ADBG_EXPECT_TEEC_SUCCESS(c, fs_alloc_enum(&sess, &e));
1317 ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_ITEM_NOT_FOUND,
1318 fs_next_enum(&sess, e, NULL, 0, out, sizeof(out)));
1319 ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_ITEM_NOT_FOUND,
1320 fs_start_enum(&sess, e, storage_id));
1321 ADBG_EXPECT_TEEC_SUCCESS(c, fs_free_enum(&sess, e));
1322 Do_ADBG_EndSubCase(c, "StartPersistentObjectEnumerator ItemNotFound");
1323
1324 Do_ADBG_BeginSubCase(c, "RenamePersistent ReadWrite");
1325 o1 = TEE_HANDLE_NULL;
1326 f = TEE_DATA_FLAG_ACCESS_READ | TEE_DATA_FLAG_ACCESS_WRITE |
1327 TEE_DATA_FLAG_ACCESS_WRITE_META | TEE_DATA_FLAG_SHARE_READ |
1328 TEE_DATA_FLAG_SHARE_WRITE | TEE_DATA_FLAG_OVERWRITE;
1329 ADBG_EXPECT_TEEC_SUCCESS(c,
1330 fs_create(&sess, file_00, sizeof(file_00), f, 0, data,
1331 sizeof(data), &o1, storage_id));
1332 ADBG_EXPECT_TEEC_SUCCESS(c,
1333 fs_rename(&sess, o1, file_01, sizeof(file_01)));
1334 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, o1));
1335 Do_ADBG_EndSubCase(c, "RenamePersistent ReadWrite");
1336
1337 Do_ADBG_BeginSubCase(c, "Close Free Reset Null");
1338 ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, TEE_HANDLE_NULL));
1339 ADBG_EXPECT_TEEC_SUCCESS(c, fs_free_obj(&sess, TEE_HANDLE_NULL));
1340 ADBG_EXPECT_TEEC_SUCCESS(c, fs_reset_obj(&sess, TEE_HANDLE_NULL));
1341 Do_ADBG_EndSubCase(c, "Close Free Reset Null");
1342
1343 TEEC_CloseSession(&sess);
Pascal Brand8a74e362015-09-10 12:41:52 +02001344}
1345
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001346DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6010)
1347
1348#ifdef WITH_GP_TESTS
Pascal Brand8a74e362015-09-10 12:41:52 +02001349static void xtest_tee_test_6011(ADBG_Case_t *c)
1350{
1351 TEEC_Session sess;
1352 uint32_t orig;
1353 /*
1354 * Test data from
1355 * Invoke_InitObjectAndAttributes_TEE_TYPE_AES_success_attribute_
1356 * TEE_ATTR_SECRET_VALUE_correct_size (9d-9a-91)
1357 */
1358 static const uint8_t attr_meta[] = {
13590xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
13600x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
13610x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
13620x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1363 };
1364 static const uint8_t attr_data[] = {
13650x60,0x3d,0xeb,0x10,0x15,0xca,0x71,0xbe,0x2b,0x73,0xae,0xf0,0x85,0x7d,0x77,
13660x81,0x1f,0x35,0x2c,0x07,0x3b,0x61,0x08,0xd7,0x2d,0x98,0x10,0xa3,0x09,0x14,
13670xdf,0xf4,
1368 };
1369
1370 if (!ADBG_EXPECT_TEEC_SUCCESS(
1371 c, xtest_teec_open_session(
1372 &sess, &gp_tta_ds_uuid, NULL, &orig)))
1373 return;
1374
1375 if (!ADBG_EXPECT_TEEC_SUCCESS(c, ds_init_object_and_attributes(&sess,
1376 0xa0000010, 0x100, attr_meta, sizeof(attr_meta), attr_data,
1377 sizeof(attr_data), 0)))
1378 goto exit;
1379
1380exit:
1381 TEEC_CloseSession(&sess);
1382}
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001383#endif /*WITH_GP_TESTS*/
Pascal Brand8a74e362015-09-10 12:41:52 +02001384
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001385static void xtest_tee_test_6012_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brandeb84c442016-04-19 17:49:49 +02001386{
1387 TEEC_Session sess;
1388 uint32_t orig;
1389 uint32_t obj;
1390
1391 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1392 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1393 return;
1394
1395 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001396 fs_create_overwrite(&sess, file_04, sizeof(file_04), storage_id)))
Pascal Brandeb84c442016-04-19 17:49:49 +02001397 goto exit;
1398
1399 TEEC_CloseSession(&sess);
1400
1401 /* re-create the same */
1402 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1403 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1404 return;
1405
1406 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001407 fs_create_overwrite(&sess, file_04, sizeof(file_04),
1408 storage_id)))
Pascal Brandeb84c442016-04-19 17:49:49 +02001409 goto exit;
1410
1411 /*
1412 * recreate it with an object, and remove it so that xtest 6009
1413 * can be replayed
1414 */
1415 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1416 fs_create(&sess, file_04, sizeof(file_04),
1417 TEE_DATA_FLAG_ACCESS_WRITE |
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001418 TEE_DATA_FLAG_ACCESS_WRITE_META |
1419 TEE_DATA_FLAG_OVERWRITE, 0, NULL, 0, &obj,
1420 storage_id)))
Pascal Brandeb84c442016-04-19 17:49:49 +02001421 goto exit;
1422
1423 /* clean */
1424 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
1425 goto exit;
1426
1427exit:
1428 TEEC_CloseSession(&sess);
1429}
1430
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001431DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6012)
1432
1433static void xtest_tee_test_6013_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brand90f23352016-05-19 15:15:47 +02001434{
1435 TEEC_Session sess;
1436 uint32_t orig;
1437 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
1438
1439 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1440 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1441 return;
1442
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001443 op.params[0].value.a = storage_id;
1444 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
Pascal Brand90f23352016-05-19 15:15:47 +02001445 TEEC_NONE, TEEC_NONE);
1446
1447 ADBG_EXPECT_TEEC_SUCCESS(c,
1448 TEEC_InvokeCommand(&sess, TA_STORAGE_CMD_KEY_IN_PERSISTENT,
1449 &op, &orig));
1450
1451 TEEC_CloseSession(&sess);
1452}
1453
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001454DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6013)
1455
1456static void xtest_tee_test_6014_single(ADBG_Case_t *c, uint32_t storage_id)
Pascal Brand29ee18f2016-05-23 14:13:56 +02001457{
1458 TEEC_Session sess;
1459 uint32_t orig;
1460 TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
1461
1462 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1463 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1464 return;
1465
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001466 op.params[0].value.a = storage_id;
1467 op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
Pascal Brand29ee18f2016-05-23 14:13:56 +02001468 TEEC_NONE, TEEC_NONE);
1469
1470 ADBG_EXPECT_TEEC_SUCCESS(c,
1471 TEEC_InvokeCommand(&sess, TA_STORAGE_CMD_LOOP, &op, &orig));
1472
1473 TEEC_CloseSession(&sess);
1474}
1475
Jerome Forissier0e99d6a2016-07-25 14:21:43 +02001476DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6014)
1477
Jerome Forissiere3854162016-08-12 12:40:12 +02001478static int get_ta_storage_path(TEEC_UUID *p_uuid, char *buffer, uint32_t len)
1479{
1480 int s;
1481
1482 if (!p_uuid || !buffer)
1483 return -1;
1484
1485 s = snprintf(buffer, len, "/data/tee/");
1486 if (s < 0 || s >= (int)len)
1487 return -1;
1488
1489 len -= s;
1490 buffer += s;
1491
1492 s = ree_fs_get_ta_dirname(p_uuid, buffer, len);
1493 return s;
1494}
1495
1496static int rename_data_dir(TEEC_UUID *old, TEEC_UUID *nw)
1497{
1498 char opath[150];
1499 char npath[150];
1500 int s;
1501
1502 s = get_ta_storage_path(old, opath, sizeof(opath));
1503 if (s < 0 || s >= (int)sizeof(opath)) {
1504 s = -1;
1505 goto exit;
1506 }
1507 s = get_ta_storage_path(nw, npath, sizeof(npath));
1508 if (s < 0 || s >= (int)sizeof(opath)) {
1509 s = -1;
1510 goto exit;
1511 }
1512 s = rename(opath, npath);
1513exit:
1514 if (s < 0)
1515 fprintf(stderr, "Warning: could not rename %s -> %s\n", opath,
1516 npath);
1517 return s;
1518}
1519
1520static void xtest_tee_test_6015_single(ADBG_Case_t *c, uint32_t storage_id)
1521{
1522 TEEC_Session sess;
1523 TEEC_Session sess2;
1524 uint32_t orig;
1525 uint32_t obj;
1526 uint32_t obj2;
1527 TEEC_UUID uuid = TA_STORAGE_UUID;
1528 TEEC_UUID uuid2 = TA_STORAGE2_UUID;
1529
1530 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1531 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1532 return;
1533
1534 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1535 xtest_teec_open_session(&sess2, &storage2_ta_uuid, NULL,
1536 &orig)))
1537 goto exit2;
1538
1539 /* TA #1 creates a persistent object */
1540 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1541 fs_create(&sess, file_01, sizeof(file_01),
1542 TEE_DATA_FLAG_ACCESS_WRITE |
1543 TEE_DATA_FLAG_ACCESS_READ |
1544 TEE_DATA_FLAG_ACCESS_WRITE_META, 0, data_00,
1545 sizeof(data_00), &obj, storage_id)))
1546 goto exit;
1547
1548 /* TA #2 tries to open the object created by TA #1 */
1549 if (!ADBG_EXPECT_TEEC_RESULT(c, TEEC_ERROR_ITEM_NOT_FOUND,
1550 fs_open(&sess2, file_01, sizeof(file_01),
1551 TEE_DATA_FLAG_ACCESS_READ, &obj2, storage_id)))
1552 goto clean;
1553
1554 if (storage_id == TEE_STORAGE_PRIVATE_REE) {
1555 /*
1556 * When the storage backend is the REE filesystem, we can
1557 * simulate a hack attempt by renaming the TA storage. Should
1558 * be detected by the TEE.
1559 */
1560 if (rename_data_dir(&uuid, &uuid2) < 0)
1561 goto clean;
1562
1563 /* TA #2 tries to open the object created by TA #1 */
1564 ADBG_EXPECT_TEEC_RESULT(c, TEE_ERROR_CORRUPT_OBJECT,
1565 fs_open(&sess2, file_01, sizeof(file_01),
1566 TEE_DATA_FLAG_ACCESS_READ, &obj2, storage_id));
1567 /*
1568 * At this point, the TEE is expected to have removed the
1569 * corrupt object, so there is no need to try and restore the
1570 * directory name.
1571 */
1572 goto exit;
1573 }
1574
1575clean:
1576 ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj));
1577exit:
1578 TEEC_CloseSession(&sess2);
1579exit2:
1580 TEEC_CloseSession(&sess);
1581}
1582
1583DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6015)
1584
Lijianhui (Airbak)29d7c7a2016-08-24 17:35:55 +08001585
1586struct test_6016_thread_arg {
1587 ADBG_Case_t *case_t;
1588 uint32_t storage_id;
Jerome Forissier54cfbef2016-08-31 18:34:31 +02001589 char file_name[8];
Lijianhui (Airbak)29d7c7a2016-08-24 17:35:55 +08001590 TEEC_Session session;
1591};
1592
1593static void *test_6016_thread(void *arg)
1594{
1595 struct test_6016_thread_arg *a = arg;
1596 TEEC_Session sess = a->session;
1597 uint32_t obj;
1598 uint8_t out[10] = { 0 };
1599 uint32_t count;
1600
1601 /* create */
1602 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t,
1603 fs_create(&sess, a->file_name, sizeof(a->file_name),
1604 TEE_DATA_FLAG_ACCESS_WRITE, 0, data_01,
1605 sizeof(data_01), &obj, a->storage_id)))
1606 goto exit;
1607
1608 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_close(&sess, obj)))
1609 goto exit;
1610
1611 /* write new data */
1612 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t,
1613 fs_open(&sess, a->file_name, sizeof(a->file_name),
1614 TEE_DATA_FLAG_ACCESS_WRITE, &obj, a->storage_id)))
1615 goto exit;
1616
1617 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t,
1618 fs_write(&sess, obj, data_00, sizeof(data_00))))
1619 goto exit;
1620
1621 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_close(&sess, obj)))
1622 goto exit;
1623
1624 /* verify */
1625 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t,
1626 fs_open(&sess, a->file_name, sizeof(a->file_name),
1627 TEE_DATA_FLAG_ACCESS_READ |
1628 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, a->storage_id)))
1629 goto exit;
1630
1631 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t,
1632 fs_read(&sess, obj, out, 10, &count)))
1633 goto exit;
1634
1635 (void)ADBG_EXPECT_BUFFER(a->case_t, data_00, 10, out, count);
1636
1637 /* clean */
1638 if (!ADBG_EXPECT_TEEC_SUCCESS(a->case_t, fs_unlink(&sess, obj)))
1639 goto exit;
1640
1641exit:
1642 return NULL;
1643}
1644
1645
1646#define NUM_THREADS 4
1647static void xtest_tee_test_6016_loop(ADBG_Case_t *c, uint32_t storage_id)
1648{
1649 size_t num_threads = NUM_THREADS;
1650 struct test_6016_thread_arg arg[num_threads];
1651 pthread_t thr[num_threads];
1652 uint32_t orig;
1653 size_t i;
1654 size_t n = 0;
1655 size_t m;
1656
1657 memset(arg, 0, sizeof(arg));
1658
1659 for (m = 0; m < num_threads; m++)
1660 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1661 xtest_teec_open_session(&arg[m].session,
1662 &storage_ta_uuid, NULL, &orig)))
1663 goto out;
1664
1665 for (n = 0; n < num_threads; n++) {
1666 arg[n].case_t = c;
1667 arg[n].storage_id = storage_id;
Jerome Forissiercb10f832016-09-01 14:53:05 +02001668 snprintf(arg[n].file_name, sizeof(arg[n].file_name),
Jens Wiklander2b1c11d2016-09-16 14:58:41 +02001669 "file_%zu", n);
Lijianhui (Airbak)29d7c7a2016-08-24 17:35:55 +08001670 if (!ADBG_EXPECT(c, 0, pthread_create(thr + n, NULL,
1671 test_6016_thread, arg + n)))
1672 goto out;
1673 }
1674
1675out:
1676 for (i = 0; i < n; i++)
1677 ADBG_EXPECT(c, 0, pthread_join(thr[i], NULL));
1678 for (i = 0; i < m; i++)
1679 TEEC_CloseSession(&arg[i].session);
1680}
1681
1682/* concurency */
1683static void xtest_tee_test_6016_single(ADBG_Case_t *c, uint32_t storage_id)
1684{
1685 int i;
1686 int loops = 8;
1687
1688 Do_ADBG_Log(" threads: %d, loops: %d", NUM_THREADS, loops);
1689 for (i = 0; i < loops; i++)
1690 xtest_tee_test_6016_loop(c, storage_id);
1691}
1692
Jerome Forissierefd71d32016-09-13 15:09:33 +02001693DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6016)
Jerome Forissier327672c2016-09-01 18:34:11 +02001694
Guanchao Liang31a9cbf2016-12-20 00:35:26 +08001695static void xtest_tee_test_6017_single(ADBG_Case_t *c, uint32_t storage_id)
1696{
1697 TEEC_Session sess;
1698 TEE_ObjectInfo obj_info1;
1699 TEE_ObjectInfo obj_info2;
1700 uint32_t obj;
1701 uint32_t orig;
1702
1703 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1704 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1705 return;
1706
1707 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1708 fs_create(&sess, file_01, sizeof(file_01),
1709 TEE_DATA_FLAG_ACCESS_WRITE, 0, NULL,
1710 0, &obj, storage_id)))
1711 goto exit;
1712
1713 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1714 fs_write(&sess, obj, data_00, sizeof(data_00))))
1715 goto exit;
1716
1717 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1718 fs_get_obj_info(&sess, obj, &obj_info1,
1719 sizeof(TEE_ObjectInfo))))
1720 goto exit;
1721
1722 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
1723 goto exit;
1724
1725 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1726 fs_open(&sess, file_01, sizeof(file_01),
1727 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
1728 goto exit;
1729
1730 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1731 fs_get_obj_info(&sess, obj, &obj_info2,
1732 sizeof(TEE_ObjectInfo))))
1733 goto exit;
1734
1735 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c,
1736 obj_info1.dataSize, ==, obj_info2.dataSize))
1737 goto exit;
1738
1739 /* clean */
1740 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
1741 goto exit;
1742
1743exit:
1744 TEEC_CloseSession(&sess);
1745}
1746
1747DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6017)
Lijianhui (Airbak)29d7c7a2016-08-24 17:35:55 +08001748
Jens Wiklanderaba31ba2017-02-15 15:24:06 +01001749static void xtest_tee_test_6018_single(ADBG_Case_t *c, uint32_t storage_id)
1750{
1751 TEEC_Session sess;
1752 TEE_ObjectInfo obj_info1;
1753 TEE_ObjectInfo obj_info2;
1754 uint32_t obj;
1755 uint32_t orig;
1756 uint8_t block[32 * 1024];
1757 size_t num_blocks;
1758 size_t block_size;
1759 size_t n;
1760
1761 if (storage_is(storage_id, TEE_STORAGE_PRIVATE_RPMB)) {
1762 /* RPMB FS is a bit resource constrained */
1763 num_blocks = 20;
1764 block_size = 1024;
1765 } else {
Jens Wiklandera3db0502017-03-09 11:39:23 +01001766 num_blocks = 40;
Jens Wiklanderaba31ba2017-02-15 15:24:06 +01001767 block_size = sizeof(block);
1768 }
1769
1770 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1771 xtest_teec_open_session(&sess, &storage_ta_uuid, NULL, &orig)))
1772 return;
1773
1774 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1775 fs_create(&sess, file_01, sizeof(file_01),
1776 TEE_DATA_FLAG_ACCESS_WRITE, 0, NULL,
1777 0, &obj, storage_id)))
1778 goto exit;
1779
1780 for (n = 0; n < num_blocks; n++) {
1781 memset(block, n, block_size);
1782
1783 Do_ADBG_Log("writing %zu", n);
1784 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1785 fs_write(&sess, obj, block, block_size)))
1786 goto exit;
1787 }
1788
1789 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1790 fs_get_obj_info(&sess, obj, &obj_info1,
1791 sizeof(TEE_ObjectInfo))))
1792 goto exit;
1793
1794 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c,
1795 obj_info1.dataSize, ==, block_size * num_blocks))
1796 goto exit;
1797
1798 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_close(&sess, obj)))
1799 goto exit;
1800
1801 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1802 fs_open(&sess, file_01, sizeof(file_01),
1803 TEE_DATA_FLAG_ACCESS_READ |
1804 TEE_DATA_FLAG_ACCESS_WRITE_META, &obj, storage_id)))
1805 goto exit;
1806
1807 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1808 fs_get_obj_info(&sess, obj, &obj_info2,
1809 sizeof(TEE_ObjectInfo))))
1810 goto exit;
1811
1812 if (!ADBG_EXPECT_COMPARE_UNSIGNED(c,
1813 obj_info1.dataSize, ==, obj_info2.dataSize))
1814 goto exit;
1815
1816 for (n = 0; n < num_blocks; n++) {
1817 uint8_t br[block_size];
1818 uint32_t count;
1819
1820 memset(block, n, block_size);
1821
1822 Do_ADBG_Log("reading %zu", n);
1823 if (!ADBG_EXPECT_TEEC_SUCCESS(c,
1824 fs_read(&sess, obj, br, sizeof(br), &count)))
1825 goto exit;
1826 if (!ADBG_EXPECT_BUFFER(c, block, block_size, br, count))
1827 goto exit;
1828 }
1829
1830 /* clean */
1831 if (!ADBG_EXPECT_TEEC_SUCCESS(c, fs_unlink(&sess, obj)))
1832 goto exit;
1833
1834exit:
1835 TEEC_CloseSession(&sess);
1836}
1837
1838DEFINE_TEST_MULTIPLE_STORAGE_IDS(xtest_tee_test_6018)
1839
Jens Wiklander74abfe32017-01-03 14:17:47 +01001840ADBG_CASE_DEFINE(regression, 6001, xtest_tee_test_6001,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001841 "Test TEE_CreatePersistentObject");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001842ADBG_CASE_DEFINE(regression, 6002, xtest_tee_test_6002,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001843 "Test TEE_OpenPersistentObject");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001844ADBG_CASE_DEFINE(regression, 6003, xtest_tee_test_6003,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001845 "Test TEE_ReadObjectData");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001846ADBG_CASE_DEFINE(regression, 6004, xtest_tee_test_6004,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001847 "Test TEE_WriteObjectData");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001848ADBG_CASE_DEFINE(regression, 6005, xtest_tee_test_6005,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001849 "Test TEE_SeekObjectData");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001850ADBG_CASE_DEFINE(regression, 6006, xtest_tee_test_6006,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001851 "Test TEE_CloseAndDeletePersistentObject");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001852ADBG_CASE_DEFINE(regression, 6007, xtest_tee_test_6007,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001853 "Test TEE_TruncateObjectData");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001854ADBG_CASE_DEFINE(regression, 6008, xtest_tee_test_6008,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001855 "Test TEE_RenamePersistentObject");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001856ADBG_CASE_DEFINE(regression, 6009, xtest_tee_test_6009,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001857 "Test TEE Internal API Persistent Object Enumeration Functions");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001858ADBG_CASE_DEFINE(regression, 6010, xtest_tee_test_6010, "Test Storage");
Pascal Brand8a74e362015-09-10 12:41:52 +02001859
Jens Wiklandere6d4ddd2016-09-14 15:50:48 +02001860#ifdef WITH_GP_TESTS
Jens Wiklander74abfe32017-01-03 14:17:47 +01001861ADBG_CASE_DEFINE(regression, 6011, xtest_tee_test_6011,
1862 "Test TEE GP TTA DS init objects");
Pascal Brand8a74e362015-09-10 12:41:52 +02001863#endif
Pascal Brandeb84c442016-04-19 17:49:49 +02001864
Jens Wiklander74abfe32017-01-03 14:17:47 +01001865ADBG_CASE_DEFINE(regression, 6012, xtest_tee_test_6012,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001866 "Test TEE GP TTA DS init objects");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001867ADBG_CASE_DEFINE(regression, 6013, xtest_tee_test_6013,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001868 "Key usage in Persistent objects");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001869ADBG_CASE_DEFINE(regression, 6014, xtest_tee_test_6014,
Jens Wiklander25a57fe2016-12-26 21:46:24 +01001870 "Loop on Persistent objects");
Jens Wiklander74abfe32017-01-03 14:17:47 +01001871ADBG_CASE_DEFINE(regression, 6015, xtest_tee_test_6015, "Storage isolation");
1872ADBG_CASE_DEFINE(regression, 6016, xtest_tee_test_6016, "Storage concurency");
1873ADBG_CASE_DEFINE(regression, 6017, xtest_tee_test_6017,
Guanchao Liang31a9cbf2016-12-20 00:35:26 +08001874 "Test Persistent objects info");
Jens Wiklanderaba31ba2017-02-15 15:24:06 +01001875ADBG_CASE_DEFINE(regression, 6018, xtest_tee_test_6018, "Large object");