1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <gtest/gtest.h>
17 #include <cstddef>
18 #include <cstdint>
19 #include <iostream>
20 #include <cstdio>
21 #include <ctime>
22 #include <memory>
23 #include <cstring>
24 #include <securec.h>
25 #include <unistd.h>
26 #include <sys/types.h>
27 #include <sys/ioctl.h>
28 #include "tee_client_type.h"
29 #include "tee_log.h"
30 #include "tc_ns_client.h"
31 #include "tee_client_ext_api.h"
32 #include "tee_client_api.h"
33 #include "cadaemon_service.h"
34 #include "tee_file.h"
35
36 using namespace testing::ext;
37 using namespace OHOS;
38
39 static const TEEC_UUID g_testUuid = {
40 0x79b77788, 0x9789, 0x4a7a,
41 { 0xa2, 0xbe, 0xb6, 0x01, 0x55, 0xee, 0xf5, 0xf3 }
42 };
43
44
45 class CaDaemonTest : public testing::Test {
46 public:
47 static void SetUpTestCase(void);
48 static void TearDownTestCase(void);
49 void SetUp();
50 void TearDown();
51 };
52
SetUpTestCase(void)53 void CaDaemonTest::SetUpTestCase(void)
54 {
55 printf("SetUp\n");
56 }
57
TearDownTestCase(void)58 void CaDaemonTest::TearDownTestCase(void)
59 {
60 printf("SetUpTestCase\n");
61 }
62
SetUp(void)63 void CaDaemonTest::SetUp(void)
64 {
65 printf("TearDownTestCase\n");
66 }
67
TearDown(void)68 void CaDaemonTest::TearDown(void)
69 {
70 printf("TearDown\n");
71 }
72
RecOpenReply(uint32_t returnOrigin,TEEC_Result ret,TEEC_Session * outSession,TEEC_Operation * operation,MessageParcel & reply)73 static bool RecOpenReply(uint32_t returnOrigin, TEEC_Result ret, TEEC_Session *outSession,
74 TEEC_Operation *operation, MessageParcel &reply)
75 {
76 bool writeRet = reply.WriteUint32(returnOrigin);
77 CHECK_ERR_RETURN(writeRet, true, writeRet);
78
79 writeRet = reply.WriteInt32((int32_t)ret);
80 CHECK_ERR_RETURN(writeRet, true, writeRet);
81
82 if (ret != TEEC_SUCCESS) {
83 return false;
84 }
85
86 writeRet = reply.WriteBuffer(outSession, sizeof(*outSession));
87 CHECK_ERR_RETURN(writeRet, true, writeRet);
88
89 bool parRet = reply.WriteBool(true);
90 CHECK_ERR_RETURN(parRet, true, false);
91 writeRet = reply.WriteBuffer(operation, sizeof(*operation));
92 CHECK_ERR_RETURN(writeRet, true, writeRet);
93
94 return true;
95 }
96 namespace {
97 /**
98 * @tc.name: CadaemonGetTeeVersion
99 * @tc.desc: Get Tee Version
100 * @tc.type: FUNC
101 * @tc.require: issueNumber
102 */
103
104 HWTEST_F(CaDaemonTest, CadaemonGetTeeVersion, TestSize.Level1)
105 {
106 uint32_t version = TEEC_GetTEEVersion();
107 EXPECT_TRUE(version != 0);
108 }
109
110 /**
111 * @tc.name: CadaemonGetTeeVersion
112 * @tc.desc: Get Tee Version
113 * @tc.type: FUNC
114 * @tc.require: issueNumber
115 */
116
117 HWTEST_F(CaDaemonTest, CaDaemonTest_001, TestSize.Level1)
118 {
119 TEEC_Result ret = TEEC_InitializeContext(nullptr, nullptr);
120 EXPECT_TRUE(ret != TEEC_SUCCESS);
121
122 char str[4097] = { 0 };
123 if (memset_s(str, sizeof(str), '1', 4096)) {
124 printf("CaDaemonTest_001 memset_s failed\n");
125 }
126 TEEC_Context context = { 0 };
127 ret = TEEC_InitializeContext(str, &context);
128 EXPECT_TRUE(ret != TEEC_SUCCESS);
129 }
130
131 HWTEST_F(CaDaemonTest, CaDaemonTest_002, TestSize.Level1)
132 {
133 char name[] = "CaDaemonTest_002";
134 TEEC_Context context = { 0 };
135 TEEC_Result ret = TEEC_InitializeContext(name, &context);
136 TEEC_FinalizeContext(&context);
137 EXPECT_TRUE(ret == TEEC_SUCCESS);
138 TEEC_FinalizeContext(nullptr);
139 }
140
141 HWTEST_F(CaDaemonTest, CaDaemonTest_003, TestSize.Level1)
142 {
143 TEEC_Context context = { 0 };
144 TEEC_Session session = { 0 };
145 TEEC_Operation operation = { 0 };
146 MessageParcel reply;
147 operation.started = 1;
148 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
149 uint32_t origin;
150 RecOpenReply(TEEC_ORIGIN_API, TEEC_SUCCESS, &session, &operation, reply);
151 TEEC_Result ret = TEEC_InitializeContext("CaDaemonTest_003", &context);
152 ret = TEEC_OpenSession(nullptr, nullptr, nullptr, TEEC_LOGIN_PUBLIC, nullptr, &operation, &origin);
153 EXPECT_TRUE(ret != TEEC_SUCCESS);
154 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_PUBLIC, nullptr, &operation, &origin);
155 EXPECT_TRUE(ret != TEEC_SUCCESS);
156 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_PUBLIC, nullptr, &operation, &origin);
157 EXPECT_TRUE(ret != TEEC_SUCCESS);
158 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, nullptr, &origin);
159 EXPECT_TRUE(ret != TEEC_SUCCESS);
160 context.ta_path = (uint8_t *)"/vendor/bin/1234.sec";
161 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
162 EXPECT_TRUE(ret != TEEC_SUCCESS);
163 FILE *fp = fopen("/data/test.sec", "w");
164 fclose(fp);
165 context.ta_path = (uint8_t *)"/data/test.sec";
166 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
167 (void)remove("/data/test.sec");
168 EXPECT_TRUE(ret != TEEC_SUCCESS);
169
170 TEEC_FinalizeContext(&context);
171 TEEC_CloseSession(nullptr);
172 TEEC_CloseSession(&session);
173 TEEC_RequestCancellation(&operation);
174 }
175
176 HWTEST_F(CaDaemonTest, CaDaemonTest_003_1, TestSize.Level1)
177 {
178 TEEC_Context context = { 0 };
179 TEEC_Session session = { 0 };
180 TEEC_Operation operation = { 0 };
181 TEEC_SharedMemory sharedMem = { 0 };
182 char buff[128] = { 0 };
183 MessageParcel reply;
184 operation.started = 1;
185 uint32_t origin;
186 RecOpenReply(TEEC_ORIGIN_API, TEEC_SUCCESS, &session, &operation, reply);
187 TEEC_Result ret = TEEC_InitializeContext("CaDaemonTest_003", &context);
188 context.ta_path = (uint8_t *)"/vendor/bin/1234.sec";
189
190 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_MEMREF_PARTIAL_OUTPUT,
191 TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_MEMREF_PARTIAL_OUTPUT);
192 operation.params[0].memref.parent = &sharedMem;
193 operation.params[0].memref.parent->buffer = (void*)buff;
194 operation.params[0].memref.parent->flags = TEEC_MEM_OUTPUT;
195 operation.params[0].memref.parent->size = 0;
196 operation.params[0].memref.offset = 1;
197 operation.params[0].memref.size = 1;
198 operation.params[1].memref.parent = &sharedMem;
199 operation.params[1].memref.parent->buffer = (void*)buff;
200 operation.params[1].memref.parent->flags = TEEC_MEM_OUTPUT;
201 operation.params[1].memref.parent->size = 0;
202 operation.params[1].memref.offset = -1;
203 operation.params[1].memref.size = 2;
204 operation.params[2].memref.parent = &sharedMem;
205 operation.params[2].memref.parent->buffer = (void*)buff;
206 operation.params[2].memref.parent->flags = TEEC_MEM_INOUT;
207 operation.params[2].memref.parent->size = 0;
208 operation.params[2].memref.offset = -1;
209 operation.params[2].memref.size = 2;
210 operation.params[3].memref.parent = &sharedMem;
211 operation.params[3].memref.parent->buffer = (void*)buff;
212 operation.params[3].memref.parent->flags = TEEC_MEM_INOUT;
213 operation.params[3].memref.parent->size = 0;
214 operation.params[3].memref.offset = 2;
215 operation.params[3].memref.size = -1;
216
217 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
218 EXPECT_TRUE(ret != TEEC_SUCCESS);
219
220 TEEC_FinalizeContext(&context);
221 TEEC_CloseSession(&session);
222 TEEC_RequestCancellation(&operation);
223 }
224
225 HWTEST_F(CaDaemonTest, CaDaemonTest_003_02, TestSize.Level1)
226 {
227 TEEC_Context context = { 0 };
228 TEEC_Session session = { 0 };
229 TEEC_Operation operation = { 0 };
230 TEEC_SharedMemory sharedMem = { 0 };
231 char buff[128] = { 0 };
232 MessageParcel reply;
233 operation.started = 1;
234 uint32_t origin;
235 RecOpenReply(TEEC_ORIGIN_API, TEEC_SUCCESS, &session, &operation, reply);
236 TEEC_Result ret = TEEC_InitializeContext("CaDaemonTest_003", &context);
237 context.ta_path = (uint8_t *)"/vendor/bin/1234.sec";
238
239 operation.paramTypes =
240 TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE);
241 operation.params[0].memref.parent = &sharedMem;
242 operation.params[0].memref.parent->buffer = (void*)buff;
243 operation.params[0].memref.parent->flags = TEEC_MEM_OUTPUT;
244 operation.params[0].memref.parent->size = 0;
245 operation.params[0].memref.offset = 1;
246 operation.params[0].memref.size = 1;
247 operation.params[1].memref.parent = &sharedMem;
248 operation.params[1].memref.parent->buffer = (void*)buff;
249 operation.params[1].memref.parent->flags = TEEC_MEM_INPUT;
250 operation.params[1].memref.parent->size = -1;
251 operation.params[1].memref.offset = -1;
252 operation.params[1].memref.size = 1;
253 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
254 EXPECT_TRUE(ret != TEEC_SUCCESS);
255
256 TEEC_FinalizeContext(&context);
257 TEEC_CloseSession(&session);
258 TEEC_RequestCancellation(&operation);
259 }
260
261 HWTEST_F(CaDaemonTest, CaDaemonTest_003_03, TestSize.Level1)
262 {
263 TEEC_Context context = { 0 };
264 TEEC_Session session = { 0 };
265 TEEC_Operation operation = { 0 };
266 TEEC_SharedMemory sharedMem = { 0 };
267 char buff[128] = { 0 };
268 MessageParcel reply;
269 operation.started = 1;
270 uint32_t origin;
271 RecOpenReply(TEEC_ORIGIN_API, TEEC_SUCCESS, &session, &operation, reply);
272 TEEC_Result ret = TEEC_InitializeContext("CaDaemonTest_003", &context);
273 context.ta_path = (uint8_t *)"/vendor/bin/1234.sec";
274
275 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INOUT, TEEC_MEMREF_PARTIAL_INOUT,
276 TEEC_MEMREF_PARTIAL_INOUT, TEEC_MEMREF_PARTIAL_INOUT);
277 operation.params[0].memref.parent = &sharedMem;
278 operation.params[0].memref.parent->buffer = (void*)buff;
279 operation.params[0].memref.parent->flags = TEEC_MEM_OUTPUT;
280 operation.params[0].memref.parent->size = 0;
281 operation.params[0].memref.offset = 1;
282 operation.params[0].memref.size = 1;
283 operation.params[1].memref.parent = &sharedMem;
284 operation.params[1].memref.parent->buffer = (void*)buff;
285 operation.params[1].memref.parent->flags = TEEC_MEM_INPUT;
286 operation.params[1].memref.parent->size = 2;
287 operation.params[1].memref.offset = -1;
288 operation.params[1].memref.size = 1;
289 operation.params[2].memref.parent = &sharedMem;
290 operation.params[2].memref.parent->buffer = (void*)buff;
291 operation.params[2].memref.parent->flags = TEEC_MEM_INOUT;
292 operation.params[2].memref.parent->size = 2;
293 operation.params[2].memref.offset = -1;
294 operation.params[2].memref.size = 1;
295 operation.params[3].memref.parent = &sharedMem;
296 operation.params[3].memref.parent->buffer = (void*)buff;
297 operation.params[3].memref.parent->flags = TEEC_MEM_INOUT;
298 operation.params[3].memref.parent->size = 0;
299 operation.params[3].memref.offset = -1;
300 operation.params[3].memref.size = 2;
301 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
302 EXPECT_TRUE(ret != TEEC_SUCCESS);
303
304 TEEC_FinalizeContext(&context);
305 TEEC_CloseSession(&session);
306 TEEC_RequestCancellation(&operation);
307 }
308
309 HWTEST_F(CaDaemonTest, CaDaemonTest_003_04, TestSize.Level1)
310 {
311 TEEC_Context context = { 0 };
312 TEEC_Session session = { 0 };
313 TEEC_Operation operation = { 0 };
314 TEEC_SharedMemory sharedMem = { 0 };
315 char buff[128] = { 0 };
316 MessageParcel reply;
317 operation.started = 1;
318 uint32_t origin;
319 RecOpenReply(TEEC_ORIGIN_API, TEEC_SUCCESS, &session, &operation, reply);
320 TEEC_Result ret = TEEC_InitializeContext("CaDaemonTest_003", &context);
321 context.ta_path = (uint8_t *)"/vendor/bin/1234.sec";
322
323 operation.paramTypes =
324 TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INOUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
325 operation.params[0].memref.parent = &sharedMem;
326 operation.params[0].memref.parent->buffer = (void*)buff;
327 operation.params[0].memref.parent->flags = TEEC_MEM_INOUT;
328 operation.params[0].memref.parent->size = UINT32_MAX;
329 operation.params[0].memref.offset = 0;
330 operation.params[0].memref.size = UINT32_MAX - 1;
331 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
332 EXPECT_TRUE(ret != TEEC_SUCCESS);
333
334 operation.paramTypes =
335 TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INOUT, TEEC_MEMREF_PARTIAL_INOUT, TEEC_NONE, TEEC_NONE);
336 operation.params[0].memref.parent = &sharedMem;
337 operation.params[0].memref.parent->buffer = (void*)buff;
338 operation.params[0].memref.parent->flags = TEEC_MEM_INOUT;
339 operation.params[0].memref.parent->size = UINT32_MAX / 2;
340 operation.params[0].memref.offset = 0;
341 operation.params[0].memref.size = UINT32_MAX / 2 - 1;
342 operation.params[1].memref.parent = &sharedMem;
343 operation.params[1].memref.parent->buffer = (void*)buff;
344 operation.params[1].memref.parent->flags = TEEC_MEM_INOUT;
345 operation.params[1].memref.parent->size = UINT32_MAX / 2;
346 operation.params[1].memref.offset = 0;
347 operation.params[2].memref.size = UINT32_MAX / 2 - 1;
348 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
349 EXPECT_TRUE(ret != TEEC_SUCCESS);
350
351 TEEC_FinalizeContext(&context);
352 TEEC_CloseSession(&session);
353 TEEC_RequestCancellation(&operation);
354 }
355
356 HWTEST_F(CaDaemonTest, CaDaemonTest_003_05, TestSize.Level1)
357 {
358 TEEC_Context context = { 0 };
359 TEEC_Session session = { 0 };
360 TEEC_Operation operation = { 0 };
361 TEEC_SharedMemory sharedMem = { 0 };
362 char buff[128] = { 0 };
363 MessageParcel reply;
364 operation.started = 1;
365 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
366 uint32_t origin;
367 RecOpenReply(TEEC_ORIGIN_API, TEEC_SUCCESS, &session, &operation, reply);
368 TEEC_Result ret = TEEC_InitializeContext("CaDaemonTest_003", &context);
369 context.ta_path = (uint8_t *)"/vendor/bin/1234.sec";
370
371 operation.paramTypes =
372 TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INOUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
373 operation.params[0].memref.parent = &sharedMem;
374 operation.params[0].memref.parent->buffer = (void*)buff;
375 operation.params[0].memref.parent->flags = TEEC_MEM_INOUT;
376 operation.params[0].memref.parent->size = UINT32_MAX;
377 operation.params[0].memref.offset = UINT32_MAX - 1;
378 operation.params[0].memref.size = 2;
379 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
380 EXPECT_TRUE(ret != TEEC_SUCCESS);
381
382 operation.paramTypes =
383 TEEC_PARAM_TYPES(TEEC_MEMREF_WHOLE, TEEC_MEMREF_WHOLE, TEEC_MEMREF_WHOLE, TEEC_MEMREF_WHOLE);
384 operation.params[0].memref.parent = nullptr;
385 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
386 EXPECT_TRUE(ret != TEEC_SUCCESS);
387
388 operation.paramTypes =
389 TEEC_PARAM_TYPES(TEEC_MEMREF_WHOLE, TEEC_MEMREF_WHOLE, TEEC_MEMREF_WHOLE, TEEC_MEMREF_WHOLE);
390 operation.params[0].memref.parent = &sharedMem;
391 operation.params[0].memref.parent->buffer = nullptr;
392 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
393 EXPECT_TRUE(ret != TEEC_SUCCESS);
394
395 TEEC_FinalizeContext(&context);
396 TEEC_CloseSession(&session);
397 TEEC_RequestCancellation(&operation);
398 }
399
400 HWTEST_F(CaDaemonTest, CaDaemonTest_003_06, TestSize.Level1)
401 {
402 TEEC_Context context = { 0 };
403 TEEC_Session session = { 0 };
404 TEEC_Operation operation = { 0 };
405 TEEC_SharedMemory sharedMem = { 0 };
406 char buff[128] = { 0 };
407 MessageParcel reply;
408 operation.started = 1;
409 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
410 uint32_t origin;
411 RecOpenReply(TEEC_ORIGIN_API, TEEC_SUCCESS, &session, &operation, reply);
412 TEEC_Result ret = TEEC_InitializeContext("CaDaemonTest_003", &context);
413 context.ta_path = (uint8_t *)"/vendor/bin/1234.sec";
414
415 operation.paramTypes =
416 TEEC_PARAM_TYPES(TEEC_MEMREF_WHOLE, TEEC_MEMREF_WHOLE, TEEC_MEMREF_WHOLE, TEEC_MEMREF_WHOLE);
417 operation.params[0].memref.parent = &sharedMem;
418 operation.params[0].memref.parent->buffer = (void*)buff;
419 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
420 EXPECT_TRUE(ret != TEEC_SUCCESS);
421
422 operation.paramTypes =
423 TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_OUTPUT, TEEC_VALUE_INOUT, TEEC_VALUE_INPUT);
424 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
425 EXPECT_TRUE(ret != TEEC_SUCCESS);
426
427 TEEC_FinalizeContext(&context);
428 TEEC_CloseSession(&session);
429 TEEC_RequestCancellation(&operation);
430 }
431
432 HWTEST_F(CaDaemonTest, CaDaemonTest_004, TestSize.Level1)
433 {
434 char name[] = "CaDaemonTest_004";
435 TEEC_Context context = { 0 };
436 TEEC_Result ret = TEEC_InitializeContext(name, &context);
437 TEEC_Session session = { 0 };
438 session.context = &context;
439 TEEC_Operation operation = { 0 };
440 uint32_t origin;
441
442 ret = TEEC_InvokeCommand(&session, 0, &operation, &origin);
443 EXPECT_TRUE(ret != TEEC_SUCCESS);
444 operation.started = 1;
445 operation.paramTypes = TEEC_PARAM_TYPES(10, 10, 10, 10);
446 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
447 EXPECT_TRUE(ret != TEEC_SUCCESS);
448
449 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
450 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
451
452 ret = TEEC_InvokeCommand(nullptr, 0, &operation, &origin);
453 EXPECT_TRUE(ret != TEEC_SUCCESS);
454
455 ret = TEEC_InvokeCommand(&session, 0, &operation, &origin);
456 EXPECT_TRUE(ret != TEEC_SUCCESS);
457
458 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_ION_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
459 operation.params[0].ionref.ion_share_fd = 1;
460 ret = TEEC_InvokeCommand(&session, 0, &operation, &origin);
461 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_ION_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
462 operation.params[0].ionref.ion_share_fd = -1;
463 ret = TEEC_InvokeCommand(&session, 0, &operation, &origin);
464 EXPECT_TRUE(ret != TEEC_SUCCESS);
465 }
466
467 HWTEST_F(CaDaemonTest, CaDaemonTest_004_001, TestSize.Level1)
468 {
469 char name[] = "CaDaemonTest_004";
470 TEEC_Context context = { 0 };
471 TEEC_Result ret = TEEC_InitializeContext(name, &context);
472 TEEC_Session session = { 0 };
473 session.context = &context;
474 TEEC_Operation operation = { 0 };
475 char buff[128] = { 0 };
476 uint32_t origin;
477
478 ret = TEEC_InvokeCommand(&session, 0, nullptr, &origin);
479 EXPECT_TRUE(ret != TEEC_SUCCESS);
480
481 operation.started = 1;
482 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_INPUT, 0, 0);
483 operation.params[0].tmpref.buffer = (void*)buff;
484 operation.params[0].tmpref.size = -1;
485 operation.params[1].tmpref.buffer = (void*)buff;
486 operation.params[1].tmpref.size = -1;
487 ret = TEEC_InvokeCommand(&session, 0, &operation, &origin);
488 EXPECT_TRUE(ret != TEEC_SUCCESS);
489 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT, TEEC_MEMREF_TEMP_INOUT, 0, 0);
490 ret = TEEC_InvokeCommand(&session, 0, &operation, &origin);
491 EXPECT_TRUE(ret != TEEC_SUCCESS);
492 }
493
494 HWTEST_F(CaDaemonTest, CaDaemonTest_005, TestSize.Level1)
495 {
496 char name[] = "CaDaemonTest_005";
497 TEEC_Context context = { 0 };
498 TEEC_Result ret = TEEC_InitializeContext(name, &context);
499 EXPECT_TRUE(ret == TEEC_SUCCESS);
500 ret = TEEC_RegisterSharedMemory(nullptr, nullptr);
501 EXPECT_TRUE(ret != TEEC_SUCCESS);
502 TEEC_SharedMemory sharedMem = { 0 };
503 ret = TEEC_RegisterSharedMemory(&context, nullptr);
504 EXPECT_TRUE(ret != TEEC_SUCCESS);
505 ret = TEEC_RegisterSharedMemory(&context, &sharedMem);
506 EXPECT_TRUE(ret != TEEC_SUCCESS);
507 sharedMem.buffer = (void*)name;
508 sharedMem.flags = TEEC_MEM_INPUT;
509 ret = TEEC_RegisterSharedMemory(&context, &sharedMem);
510 EXPECT_TRUE(ret == TEEC_SUCCESS);
511 sharedMem.flags = TEEC_MEM_OUTPUT;
512 ret = TEEC_RegisterSharedMemory(&context, &sharedMem);
513 EXPECT_TRUE(ret == TEEC_SUCCESS);
514 sharedMem.flags = TEEC_MEM_INOUT;
515 ret = TEEC_RegisterSharedMemory(&context, &sharedMem);
516 EXPECT_TRUE(ret == TEEC_SUCCESS);
517 TEEC_ReleaseSharedMemory(&sharedMem);
518 sharedMem.buffer = nullptr;
519 TEEC_ReleaseSharedMemory(&sharedMem);
520 sharedMem.context = nullptr;
521 TEEC_ReleaseSharedMemory(&sharedMem);
522 TEEC_ReleaseSharedMemory(nullptr);
523 TEEC_FinalizeContext(&context);
524 }
525
526 HWTEST_F(CaDaemonTest, CaDaemonTest_006, TestSize.Level1)
527 {
528 TEEC_Result ret = TEEC_AllocateSharedMemory(nullptr, nullptr);
529 EXPECT_TRUE(ret != TEEC_SUCCESS);
530 char name[] = "CaDaemonTest_006";
531 TEEC_Context context = { 0 };
532 TEEC_SharedMemory sharedMem = { 0 };
533 ret = TEEC_AllocateSharedMemory(&context, &sharedMem);
534 EXPECT_TRUE(ret != TEEC_SUCCESS);
535 ret = TEEC_InitializeContext(name, &context);
536 EXPECT_TRUE(ret == TEEC_SUCCESS);
537 ret = TEEC_AllocateSharedMemory(&context, &sharedMem);
538 EXPECT_TRUE(ret != TEEC_SUCCESS);
539 sharedMem.flags = TEEC_MEM_INPUT;
540 ret = TEEC_AllocateSharedMemory(&context, &sharedMem);
541 EXPECT_TRUE(ret == TEEC_SUCCESS);
542 TEEC_FinalizeContext(&context);
543 TEEC_ReleaseSharedMemory(&sharedMem);
544 sharedMem.buffer = (void *)0xffff0001;
545 TEEC_ReleaseSharedMemory(&sharedMem);
546 sharedMem.flags = TEEC_MEM_INPUT;
547 sharedMem.size = 1024;
548 ret = TEEC_InitializeContext(name, &context);
549 ret = TEEC_AllocateSharedMemory(&context, &sharedMem);
550 TEEC_ReleaseSharedMemory(&sharedMem);
551 sharedMem.flags = TEEC_MEM_INPUT;
552 sharedMem.size = 1024 * 1024 * 1024;
553 ret = TEEC_AllocateSharedMemory(&context, &sharedMem);
554 TEEC_ReleaseSharedMemory(&sharedMem);
555 sharedMem.flags = TEEC_MEM_INOUT;
556 sharedMem.size = 1024;
557 ret = TEEC_AllocateSharedMemory(&context, &sharedMem);
558 EXPECT_TRUE(ret == TEEC_SUCCESS);
559 TEEC_FinalizeContext(&context);
560 TEEC_ReleaseSharedMemory(&sharedMem);
561 ret = TEEC_InitializeContext(name, &context);
562 ret = TEEC_AllocateSharedMemory(&context, &sharedMem);
563 sharedMem.flags = TEEC_MEM_INOUT;
564 sharedMem.size = 1024;
565 ret = TEEC_AllocateSharedMemory(&context, &sharedMem);
566 // 为了覆盖tee_client析构的释放流程,此处不释放alloc的内存
567 }
568
569 HWTEST_F(CaDaemonTest, CaDaemonTest_007, TestSize.Level1)
570 {
571 TEEC_Context context = { 0 };
572 TEEC_Result ret = TEEC_InitializeContext("CaDaemonTest_007", &context);
573 TEEC_SharedMemory sharedMem;
574 sharedMem.size = 1024;
575 sharedMem.flags = TEEC_MEM_INPUT;
576 ret = TEEC_AllocateSharedMemory(&context, &sharedMem);
577 EXPECT_TRUE(ret == TEEC_SUCCESS);
578 strcpy_s((char*)(sharedMem.buffer), sharedMem.size, "1122334455");
579 strcpy_s((char*)(sharedMem.buffer) + 100, sharedMem.size, "100200300400");
580 TEEC_Session session = { 0 };
581 session.context = &context;
582 TEEC_Operation operation = { 0 };
583 operation.started = 1;
584 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
585 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
586 EXPECT_TRUE(ret != TEEC_SUCCESS);
587 operation.params[0].memref.parent = &sharedMem;
588 operation.params[0].memref.parent->flags = 0;
589 operation.params[0].memref.offset = 100;
590 operation.params[0].memref.size = 10;
591 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
592 EXPECT_TRUE(ret != TEEC_SUCCESS);
593 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_OUTPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
594 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
595 EXPECT_TRUE(ret != TEEC_SUCCESS);
596 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INOUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
597 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
598 EXPECT_TRUE(ret != TEEC_SUCCESS);
599 operation.params[0].memref.parent->flags = 1;
600 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
601 EXPECT_TRUE(ret != TEEC_SUCCESS);
602 operation.params[0].memref.parent->flags = 1;
603 operation.params[1].memref.parent = &sharedMem;
604 operation.params[1].memref.offset = 0;
605 operation.params[1].memref.size = 0;
606 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_MEMREF_WHOLE, TEEC_NONE, TEEC_NONE);
607 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
608 printf("CaDaemonTest_007 01 TEEC_InvokeCommand ret=%x\n", ret);
609 EXPECT_TRUE(ret != TEEC_SUCCESS);
610 TEEC_ReleaseSharedMemory(&sharedMem);
611 }
612
613 HWTEST_F(CaDaemonTest, CaDaemonTest_008, TestSize.Level1)
614 {
615 TEEC_Context context = { 0 };
616 TEEC_Result ret = TEEC_InitializeContext("CaDaemonTest_007", &context);
617 TEEC_SharedMemory sharedMem;
618 sharedMem.size = 1024;
619 sharedMem.flags = TEEC_MEM_INPUT;
620 ret = TEEC_AllocateSharedMemory(&context, &sharedMem);
621 EXPECT_TRUE(ret == TEEC_SUCCESS);
622 strcpy_s((char*)(sharedMem.buffer), sharedMem.size, "1122334455");
623 strcpy_s((char*)(sharedMem.buffer) + 100, sharedMem.size, "100200300400");
624 TEEC_Operation operation = { 0 };
625 operation.started = 1;
626 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
627 printf("CaDaemonTest_007 operation.paramTypes=%x\n", operation.paramTypes);
628 char tmpbuff[10] = { 0 };
629 operation.params[0].tmpref.buffer = (void*)tmpbuff;
630 operation.params[0].tmpref.size = 0;
631 TEEC_Session session = { 0 };
632 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
633 EXPECT_TRUE(ret != TEEC_SUCCESS);
634 operation.params[0].tmpref.buffer = nullptr;
635 operation.params[0].tmpref.size = 0;
636 session.context = &context;
637 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
638 EXPECT_TRUE(ret != TEEC_SUCCESS);
639 operation.params[0].tmpref.buffer = (void*)tmpbuff;
640 operation.params[0].tmpref.size = 0;
641 session.context = &context;
642 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
643 EXPECT_TRUE(ret != TEEC_SUCCESS);
644 operation.params[0].tmpref.buffer = nullptr;
645 operation.params[0].tmpref.size = 1;
646 session.context = &context;
647 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
648 EXPECT_TRUE(ret != TEEC_SUCCESS);
649 operation.params[0].tmpref.buffer = (void*)tmpbuff;
650 operation.params[0].tmpref.size = sizeof(tmpbuff);
651 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
652 EXPECT_TRUE(ret != TEEC_SUCCESS);
653
654 TEEC_ReleaseSharedMemory(&sharedMem);
655 TEEC_FinalizeContext(&context);
656 }
657
658 HWTEST_F(CaDaemonTest, CaDaemonTest_008_01, TestSize.Level1)
659 {
660 TEEC_Context context = { 0 };
661 TEEC_Result ret = TEEC_InitializeContext("CaDaemonTest_008", &context);
662 TEEC_SharedMemory sharedMem;
663 sharedMem.size = 1024;
664 sharedMem.flags = TEEC_MEM_INPUT;
665 ret = TEEC_AllocateSharedMemory(&context, &sharedMem);
666 EXPECT_TRUE(ret == TEEC_SUCCESS);
667 strcpy_s((char*)(sharedMem.buffer), sharedMem.size, "1122334455");
668 strcpy_s((char*)(sharedMem.buffer) + 100, sharedMem.size, "100200300400");
669 char tmpbuff[10] = { 0 };
670 TEEC_Operation operation = { 0 };
671 TEEC_Session session = { 0 };
672 operation.started = 1;
673 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT, TEEC_MEMREF_TEMP_INPUT, TEEC_NONE, TEEC_NONE);
674 operation.params[0].tmpref.buffer = (void*)tmpbuff;
675 operation.params[0].tmpref.size = 1;
676 operation.params[1].tmpref.buffer = (void*)tmpbuff;
677 operation.params[1].tmpref.size = -1;
678 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
679 EXPECT_TRUE(ret != TEEC_SUCCESS);
680 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, TEEC_MEMREF_TEMP_INOUT,
681 TEEC_MEMREF_TEMP_OUTPUT, TEEC_MEMREF_TEMP_OUTPUT);
682 operation.params[0].tmpref.buffer = (void*)tmpbuff;
683 operation.params[0].tmpref.size = 1;
684 operation.params[1].tmpref.buffer = (void*)tmpbuff;
685 operation.params[1].tmpref.size = -1;
686 operation.params[2].tmpref.buffer = (void*)tmpbuff;
687 operation.params[2].tmpref.size = 1;
688 operation.params[3].tmpref.buffer = (void*)tmpbuff;
689 operation.params[3].tmpref.size = -1;
690 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
691 EXPECT_TRUE(ret != TEEC_SUCCESS);
692 char *tmpbuff2 = new char[1024 * 1024];
693 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INOUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
694 operation.params[0].tmpref.buffer = (void*)tmpbuff2;
695 operation.params[0].tmpref.size = -1;
696 ret = TEEC_InvokeCommand(&session, 1, &operation, nullptr);
697 EXPECT_TRUE(ret != TEEC_SUCCESS);
698 delete[] tmpbuff2;
699 TEEC_ReleaseSharedMemory(&sharedMem);
700 TEEC_FinalizeContext(&context);
701 }
702
703 HWTEST_F(CaDaemonTest, CaDaemonTest_009, TestSize.Level1)
704 {
705 TEEC_Context context = { 0 };
706 TEEC_Session session = { 0 };
707 session.context = &context;
708 TEEC_Result ret = TEEC_SendSecfile(nullptr, &session);
709 EXPECT_TRUE(ret != TEEC_SUCCESS);
710
711 ret = TEEC_SendSecfile("/unittest/test.sec", &session);
712 EXPECT_TRUE(ret != TEEC_SUCCESS);
713
714 FILE *fp = fopen("/data/test.sec", "w");
715 fclose(fp);
716 ret = TEEC_SendSecfile("/data/test.mbn", &session);
717 EXPECT_TRUE(ret != TEEC_SUCCESS);
718
719 ret = TEEC_SendSecfile("/vendor/bin/teecd", &session);
720 EXPECT_TRUE(ret != TEEC_SUCCESS);
721
722 ret = TEEC_SendSecfile("/data/test.sec", &session);
723 (void)remove("/data/test.sec");
724 EXPECT_TRUE(ret != TEEC_SUCCESS);
725 }
726
727 HWTEST_F(CaDaemonTest, CaDaemonTest_010, TestSize.Level1)
728 {
729 char name[] = "CaDaemonTest_010";
730 TEEC_Context context = { 0 };
731 TEEC_Session session = { 0 };
732 TEEC_Operation operation = { 0 };
733 operation.started = 1;
734 operation.paramTypes = TEEC_PARAM_TYPES(TEEC_NONE, TEEC_NONE, TEEC_NONE, TEEC_NONE);
735 uint32_t origin;
736 TEEC_Result ret = TEEC_InitializeContext(nullptr, &context);
737 EXPECT_TRUE(ret == TEEC_SUCCESS);
738 TEEC_SharedMemory sharedMem = { 0 };
739 sharedMem.buffer = (void*)name;
740 sharedMem.flags = TEEC_MEM_INPUT;
741 sharedMem.size = 10;
742 ret = TEEC_RegisterSharedMemory(&context, &sharedMem);
743 EXPECT_TRUE(ret == TEEC_SUCCESS);
744 operation.paramTypes =
745 TEEC_PARAM_TYPES(TEEC_MEMREF_PARTIAL_INPUT, TEEC_NONE, TEEC_NONE, TEEC_NONE);
746 operation.params[0].memref.parent = &sharedMem;
747 operation.params[0].memref.offset = 0;
748 operation.params[0].memref.size = 5;
749 ret = TEEC_OpenSession(&context, &session, &g_testUuid, TEEC_LOGIN_IDENTIFY, nullptr, &operation, &origin);
750 EXPECT_TRUE(ret != TEEC_SUCCESS);
751 }
752
753 HWTEST_F(CaDaemonTest, CaDaemonTest_011, TestSize.Level1)
754 {
755 char name[] = "CaDaemonTest_011";
756 TEEC_Context context = { 0 };
757 TEEC_Result ret = TEEC_InitializeContext(name, &context);
758 TEEC_FinalizeContext(&context);
759 TEEC_SharedMemory sharedMem = { 0 };
760 sharedMem.buffer = (void*)name;
761 sharedMem.flags = TEEC_MEM_INPUT;
762 ret = TEEC_RegisterSharedMemory(&context, &sharedMem);
763 EXPECT_TRUE(ret != TEEC_SUCCESS);
764 TEEC_ReleaseSharedMemory(&sharedMem);
765 sharedMem.buffer = (void*)name;
766 sharedMem.flags = TEEC_MEM_INPUT;
767 ret = TEEC_RegisterSharedMemory(&context, &sharedMem);
768 EXPECT_TRUE(ret != TEEC_SUCCESS);
769 sharedMem.context->fd = 0xfff;
770 TEEC_ReleaseSharedMemory(&sharedMem);
771 for (int i = 0; i < 20; i++) {
772 (void)TEEC_InitializeContext(nullptr, &context);
773 }
774 }
775 }