• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }