blob: 989187fde61081aa8a7d181d868e1cb65f22a8d7 [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 <stdio.h>
15#include <string.h>
16#include <stdlib.h>
17#include <sys/types.h>
18#include <unistd.h>
19#include "xtest_test.h"
20#include "xtest_helpers.h"
Pascal Brandc639ac82015-07-02 08:53:34 +020021#include "tee_api_defines.h"
22#include "tee_client_api.h"
23#include "xml_client_api.h"
24
25static bool xtest_init = false;
26
27static bool xtest_tee_init(ADBG_Case_t *c)
28{
29 if (xtest_init)
30 return true;
31
32 SHARE_MEM01 = malloc(sizeof(TEEC_SharedMemory));
33 if (!ADBG_EXPECT_NOT_NULL(c, SHARE_MEM01))
34 goto exit;
35
36 SHARE_MEM02 = malloc(sizeof(TEEC_SharedMemory));
37 if (!ADBG_EXPECT_NOT_NULL(c, SHARE_MEM02))
38 goto exit;
39
40 SESSION01 = malloc(sizeof(TEEC_Session));
41 if (!ADBG_EXPECT_NOT_NULL(c, SESSION01))
42 goto exit;
43
44 CONTEXT01 = malloc(sizeof(TEEC_Context));
45 if (!ADBG_EXPECT_NOT_NULL(c, CONTEXT01))
46 goto exit;
47
48 OPERATION01 = malloc(sizeof(TEEC_Operation));
49 if (!ADBG_EXPECT_NOT_NULL(c, OPERATION01))
50 goto exit;
51
52 OPERATION02 = malloc(sizeof(TEEC_Operation));
53 if (!ADBG_EXPECT_NOT_NULL(c, OPERATION02))
54 goto exit;
55
56 xtest_init = true;
57
58 return xtest_init;
59
60exit:
61 if (SHARE_MEM01) {
62 free(SHARE_MEM01);
63 SHARE_MEM01 = NULL;
64 }
65 if (SHARE_MEM02) {
66 free(SHARE_MEM02);
67 SHARE_MEM02 = NULL;
68 }
69 if (SESSION01) {
70 free(SESSION01);
71 SESSION01 = NULL;
72 }
73 if (CONTEXT01) {
74 free(CONTEXT01);
75 CONTEXT01 = NULL;
76 }
77 if (OPERATION01) {
78 free(OPERATION01);
79 OPERATION01 = NULL;
80 }
81 if (OPERATION02) {
82 free(OPERATION02);
83 OPERATION02 = NULL;
84 }
85
86 xtest_init = false;
87 return xtest_init;
88}
89
90/*29-84-6d*/
91static void xtest_tee_7001(ADBG_Case_t *c)
92{
93 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
94 return;
95 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
96 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
97 ADBG_EXPECT(c, TEEC_SUCCESS,
98 AllocateSharedMemory(CONTEXT01, SHARE_MEM01, SIZE_VALUE01,
99 TEEC_MEM_INPUT));
100 TEEC_ReleaseSharedMemory(SHARE_MEM01);
101 TEEC_FinalizeContext(CONTEXT01);
102}
103
104/*29-c2-4c*/
105static void xtest_tee_7002(ADBG_Case_t *c)
106{
107 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
108 return;
109 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
110 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
111 ADBG_EXPECT(c, TEEC_ERROR_OUT_OF_MEMORY,
112 AllocateSharedMemory(CONTEXT01, SHARE_MEM01,
113 SIZE_OVER_MEMORY, TEEC_MEM_INPUT));
114 TEEC_FinalizeContext(CONTEXT01);
115}
116
117/*29-b0-da*/
118static void xtest_tee_7003(ADBG_Case_t *c)
119{
120 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
121 return;
122 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
123 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
124 ADBG_EXPECT(c, TEEC_SUCCESS,
125 AllocateSharedMemory(CONTEXT01, SHARE_MEM01, BIG_SIZE,
126 TEEC_MEM_OUTPUT));
127 TEEC_ReleaseSharedMemory(NULL);
128 TEEC_ReleaseSharedMemory(SHARE_MEM01);
129 TEEC_FinalizeContext(CONTEXT01);
130}
131
132/*29-1c-00*/
133static void xtest_tee_7004(ADBG_Case_t *c)
134{
135 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
136 return;
137 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
138 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
139 ADBG_EXPECT(c, TEEC_SUCCESS,
140 AllocateSharedMemory(CONTEXT01, SHARE_MEM01, SIZE_VALUE01,
141 TEEC_MEM_INOUT));
142 TEEC_ReleaseSharedMemory(SHARE_MEM01);
143 TEEC_FinalizeContext(CONTEXT01);
144}
145
146/*29-9f-a2*/
147static void xtest_tee_7005(ADBG_Case_t *c)
148{
149 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
150 return;
151 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
152 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
153 ADBG_EXPECT(c, TEEC_SUCCESS,
154 RegisterSharedMemory(CONTEXT01, SHARE_MEM01, SIZE_VALUE01,
155 TEEC_MEM_INPUT));
156 TEEC_ReleaseSharedMemory(SHARE_MEM01);
157 TEEC_FinalizeContext(CONTEXT01);
158}
159
160/*29-11-02*/
161static void xtest_tee_7006(ADBG_Case_t *c)
162{
163 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
164 return;
165 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
166 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
167 ADBG_EXPECT(c, TEEC_SUCCESS,
168 RegisterSharedMemory(CONTEXT01, SHARE_MEM01, SIZE_VALUE01,
169 TEEC_MEM_OUTPUT));
170 TEEC_ReleaseSharedMemory(SHARE_MEM01);
171 TEEC_FinalizeContext(CONTEXT01);
172}
173
174/*29-1f-a2*/
175static void xtest_tee_7007(ADBG_Case_t *c)
176{
177 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
178 return;
179 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
180 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
181 ADBG_EXPECT(c, TEEC_SUCCESS,
182 RegisterSharedMemory(CONTEXT01, SHARE_MEM01, BIG_SIZE,
183 TEEC_MEM_INOUT));
184 TEEC_ReleaseSharedMemory(SHARE_MEM01);
185 TEEC_FinalizeContext(CONTEXT01);
186}
187
188/*29-2e-8d*/
189static void xtest_tee_7008(ADBG_Case_t *c)
190{
191 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
192 return;
193 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
194 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
195 ADBG_EXPECT(c, TEEC_SUCCESS,
196 RegisterSharedMemory(CONTEXT01, SHARE_MEM01, ZERO,
197 TEEC_MEM_OUTPUT));
198 TEEC_ReleaseSharedMemory(SHARE_MEM01);
199 TEEC_FinalizeContext(CONTEXT01);
200}
201
202/*29-2b-3f*/
203static void xtest_tee_7009(ADBG_Case_t *c)
204{
205 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
206 return;
207 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
208 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
209 XML_OpenSession(c, CONTEXT01, SESSION01, &UUID_Unknown,
210 TEEC_LOGIN_PUBLIC, NULL, NULL,
211 TEEC_ORIGIN_ANY_NOT_TRUSTED_APP, TEEC_UNDEFINED_ERROR);
212 TEEC_FinalizeContext(CONTEXT01);
213}
214
215/*29-cd-39*/
216static void xtest_tee_7010(ADBG_Case_t *c)
217{
218 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
219 return;
220 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
221 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
222 ADBG_EXPECT(c, TEEC_SUCCESS,
223 AllocateSharedMemory(CONTEXT01, SHARE_MEM01, ZERO,
224 TEEC_MEM_OUTPUT));
225 TEEC_ReleaseSharedMemory(SHARE_MEM01);
226 TEEC_FinalizeContext(CONTEXT01);
227}
228
Pascal Brandc639ac82015-07-02 08:53:34 +0200229/*29-a2-e3*/
230static void xtest_tee_7013(ADBG_Case_t *c)
231{
232 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
233 return;
234 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
235 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
236 XML_OpenSession(c, CONTEXT01, SESSION01,
237 &UUID_TTA_answerSuccessTo_OpenSession_Invoke,
238 INVALID_CONNECTION_METHODS, NULL, NULL,
239 TEEC_ORIGIN_ANY_NOT_TRUSTED_APP, TEEC_UNDEFINED_ERROR);
240 TEEC_FinalizeContext(CONTEXT01);
241}
242
Pascal Brandc639ac82015-07-02 08:53:34 +0200243/*29-db-48*/
244static void xtest_tee_7016(ADBG_Case_t *c)
245{
246 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
247 return;
248 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
249 TEEC_CloseSession(NULL);
250}
251
252/*29-a1-83*/
253static void xtest_tee_7017(ADBG_Case_t *c)
254{
255 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
256 return;
257 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
258 XML_InitializeContext(c, INVALID_NOT_EXISTING_TEE, CONTEXT01,
259 TEEC_UNDEFINED_ERROR);
260}
261
262/*29-c1-a5*/
263static void xtest_tee_7018(ADBG_Case_t *c)
264{
265 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
266 return;
267 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
268 TEEC_FinalizeContext(NULL);
269}
270
271/*29-91-aa*/
272static void xtest_tee_7019(ADBG_Case_t *c)
273{
274 if (!ADBG_EXPECT_TRUE(c, xtest_tee_init(c)))
275 return;
276 TEEC_createThread(CLIENT_APP01, THREAD02);
277 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
278 XML_InitializeContext(c, _device, CONTEXT01, TEEC_SUCCESS);
279 TEEC_SelectApp(CLIENT_APP01, THREAD02);
280 thr2_ctx.c = c;
281 thr2_ctx.ctx = CONTEXT01;
282 ctx_init_finalize(thr2_ctx);
283 TEEC_SelectApp(CLIENT_APP01, THREAD01_DEFAULT);
284 TEEC_FinalizeContext(CONTEXT01);
285}
286
Jens Wiklander74abfe32017-01-03 14:17:47 +0100287ADBG_CASE_DEFINE(regression, 7001, xtest_tee_7001,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100288 "Allocate_In RELEASE_SHARED_MEMORY_WHEN_ALLOCATED");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100289ADBG_CASE_DEFINE(regression, 7002, xtest_tee_7002,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100290 "Allocate_out_of_memory INITIALIZE_CONTEXT_NAMES");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100291ADBG_CASE_DEFINE(regression, 7003, xtest_tee_7003,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100292 "ReleaseSharedMemory_null RELEASE_SHARED_MEMORY_WHEN_ALLOCATED");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100293ADBG_CASE_DEFINE(regression, 7004, xtest_tee_7004,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100294 "Allocate_InOut RELEASE_SHARED_MEMORY_WHEN_ALLOCATED");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100295ADBG_CASE_DEFINE(regression, 7005, xtest_tee_7005,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100296 "Register_In RELEASE_SHARED_MEMORY_WHEN_REGISTERED");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100297ADBG_CASE_DEFINE(regression, 7006, xtest_tee_7006,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100298 "Register_notZeroLength_Out RELEASE_SHARED_MEMORY_WHEN_REGISTERED");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100299ADBG_CASE_DEFINE(regression, 7007, xtest_tee_7007,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100300 "Register_InOut RELEASE_SHARED_MEMORY_WHEN_REGISTERED");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100301ADBG_CASE_DEFINE(regression, 7008, xtest_tee_7008,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100302 "Register_zeroLength_Out RELEASE_SHARED_MEMORY_WHEN_REGISTERED");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100303ADBG_CASE_DEFINE(regression, 7009, xtest_tee_7009,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100304 "OpenSession_error_notExistingTA OPEN_SESSION_TARGET_TRUSTED_APP");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100305ADBG_CASE_DEFINE(regression, 7010, xtest_tee_7010,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100306 "Allocate_Out RELEASE_SHARED_MEMORY_WHEN_ALLOCATED");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100307ADBG_CASE_DEFINE(regression, 7013, xtest_tee_7013,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100308 "OpenSession_error_originTEE OPEN_SESSION_TARGET_TRUSTED_APP");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100309ADBG_CASE_DEFINE(regression, 7016, xtest_tee_7016,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100310 "CloseSession_null CLOSE_SESSION_IGNORE_SESSION_NULL");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100311ADBG_CASE_DEFINE(regression, 7017, xtest_tee_7017,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100312 "InitializeContext_NotExistingTEE INITIALIZE_CONTEXT_NAMES");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100313ADBG_CASE_DEFINE(regression, 7018, xtest_tee_7018,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100314 "FinalizeContext_null FINALIZE_CONTEXT_IGNORE_NULL");
Jens Wiklander74abfe32017-01-03 14:17:47 +0100315ADBG_CASE_DEFINE(regression, 7019, xtest_tee_7019,
Jens Wiklander25a57fe2016-12-26 21:46:24 +0100316 "InitializeContext_concurrentContext INITIALIZE_CONTEXT_NAMES");