1 // SPDX-License-Identifier: GPL-2.0-only
3 * KUnit tests for AppArmor's policy unpack.
6 #include <kunit/test.h>
7 #include <kunit/visibility.h>
9 #include "include/policy.h"
10 #include "include/policy_unpack.h"
12 #define TEST_STRING_NAME "TEST_STRING"
13 #define TEST_STRING_DATA "testing"
14 #define TEST_STRING_BUF_OFFSET \
15 (3 + strlen(TEST_STRING_NAME) + 1)
17 #define TEST_U32_NAME "U32_TEST"
18 #define TEST_U32_DATA ((u32)0x01020304)
19 #define TEST_NAMED_U32_BUF_OFFSET \
20 (TEST_STRING_BUF_OFFSET + 3 + strlen(TEST_STRING_DATA) + 1)
21 #define TEST_U32_BUF_OFFSET \
22 (TEST_NAMED_U32_BUF_OFFSET + 3 + strlen(TEST_U32_NAME) + 1)
24 #define TEST_U16_OFFSET (TEST_U32_BUF_OFFSET + 3)
25 #define TEST_U16_DATA ((u16)(TEST_U32_DATA >> 16))
27 #define TEST_U64_NAME "U64_TEST"
28 #define TEST_U64_DATA ((u64)0x0102030405060708)
29 #define TEST_NAMED_U64_BUF_OFFSET (TEST_U32_BUF_OFFSET + sizeof(u32) + 1)
30 #define TEST_U64_BUF_OFFSET \
31 (TEST_NAMED_U64_BUF_OFFSET + 3 + strlen(TEST_U64_NAME) + 1)
33 #define TEST_BLOB_NAME "BLOB_TEST"
34 #define TEST_BLOB_DATA "\xde\xad\x00\xbe\xef"
35 #define TEST_BLOB_DATA_SIZE (ARRAY_SIZE(TEST_BLOB_DATA))
36 #define TEST_NAMED_BLOB_BUF_OFFSET (TEST_U64_BUF_OFFSET + sizeof(u64) + 1)
37 #define TEST_BLOB_BUF_OFFSET \
38 (TEST_NAMED_BLOB_BUF_OFFSET + 3 + strlen(TEST_BLOB_NAME) + 1)
40 #define TEST_ARRAY_NAME "ARRAY_TEST"
41 #define TEST_ARRAY_SIZE 16
42 #define TEST_NAMED_ARRAY_BUF_OFFSET \
43 (TEST_BLOB_BUF_OFFSET + 5 + TEST_BLOB_DATA_SIZE)
44 #define TEST_ARRAY_BUF_OFFSET \
45 (TEST_NAMED_ARRAY_BUF_OFFSET + 3 + strlen(TEST_ARRAY_NAME) + 1)
47 MODULE_IMPORT_NS(EXPORTED_FOR_KUNIT_TESTING);
49 struct policy_unpack_fixture {
54 static struct aa_ext *build_aa_ext_struct(struct policy_unpack_fixture *puf,
55 struct kunit *test, size_t buf_size)
60 buf = kunit_kzalloc(test, buf_size, GFP_USER);
61 KUNIT_EXPECT_NOT_ERR_OR_NULL(test, buf);
63 e = kunit_kmalloc(test, sizeof(*e), GFP_USER);
64 KUNIT_EXPECT_NOT_ERR_OR_NULL(test, e);
67 e->end = e->start + buf_size;
71 *(buf + 1) = strlen(TEST_STRING_NAME) + 1;
72 strcpy(buf + 3, TEST_STRING_NAME);
74 buf = e->start + TEST_STRING_BUF_OFFSET;
76 *(buf + 1) = strlen(TEST_STRING_DATA) + 1;
77 strcpy(buf + 3, TEST_STRING_DATA);
79 buf = e->start + TEST_NAMED_U32_BUF_OFFSET;
81 *(buf + 1) = strlen(TEST_U32_NAME) + 1;
82 strcpy(buf + 3, TEST_U32_NAME);
83 *(buf + 3 + strlen(TEST_U32_NAME) + 1) = AA_U32;
84 *((u32 *)(buf + 3 + strlen(TEST_U32_NAME) + 2)) = TEST_U32_DATA;
86 buf = e->start + TEST_NAMED_U64_BUF_OFFSET;
88 *(buf + 1) = strlen(TEST_U64_NAME) + 1;
89 strcpy(buf + 3, TEST_U64_NAME);
90 *(buf + 3 + strlen(TEST_U64_NAME) + 1) = AA_U64;
91 *((u64 *)(buf + 3 + strlen(TEST_U64_NAME) + 2)) = TEST_U64_DATA;
93 buf = e->start + TEST_NAMED_BLOB_BUF_OFFSET;
95 *(buf + 1) = strlen(TEST_BLOB_NAME) + 1;
96 strcpy(buf + 3, TEST_BLOB_NAME);
97 *(buf + 3 + strlen(TEST_BLOB_NAME) + 1) = AA_BLOB;
98 *(buf + 3 + strlen(TEST_BLOB_NAME) + 2) = TEST_BLOB_DATA_SIZE;
99 memcpy(buf + 3 + strlen(TEST_BLOB_NAME) + 6,
100 TEST_BLOB_DATA, TEST_BLOB_DATA_SIZE);
102 buf = e->start + TEST_NAMED_ARRAY_BUF_OFFSET;
104 *(buf + 1) = strlen(TEST_ARRAY_NAME) + 1;
105 strcpy(buf + 3, TEST_ARRAY_NAME);
106 *(buf + 3 + strlen(TEST_ARRAY_NAME) + 1) = AA_ARRAY;
107 *((u16 *)(buf + 3 + strlen(TEST_ARRAY_NAME) + 2)) = TEST_ARRAY_SIZE;
112 static int policy_unpack_test_init(struct kunit *test)
114 size_t e_size = TEST_ARRAY_BUF_OFFSET + sizeof(u16) + 1;
115 struct policy_unpack_fixture *puf;
117 puf = kunit_kmalloc(test, sizeof(*puf), GFP_USER);
118 KUNIT_EXPECT_NOT_ERR_OR_NULL(test, puf);
120 puf->e_size = e_size;
121 puf->e = build_aa_ext_struct(puf, test, e_size);
127 static void policy_unpack_test_inbounds_when_inbounds(struct kunit *test)
129 struct policy_unpack_fixture *puf = test->priv;
131 KUNIT_EXPECT_TRUE(test, aa_inbounds(puf->e, 0));
132 KUNIT_EXPECT_TRUE(test, aa_inbounds(puf->e, puf->e_size / 2));
133 KUNIT_EXPECT_TRUE(test, aa_inbounds(puf->e, puf->e_size));
136 static void policy_unpack_test_inbounds_when_out_of_bounds(struct kunit *test)
138 struct policy_unpack_fixture *puf = test->priv;
140 KUNIT_EXPECT_FALSE(test, aa_inbounds(puf->e, puf->e_size + 1));
143 static void policy_unpack_test_unpack_array_with_null_name(struct kunit *test)
145 struct policy_unpack_fixture *puf = test->priv;
148 puf->e->pos += TEST_ARRAY_BUF_OFFSET;
150 array_size = aa_unpack_array(puf->e, NULL);
152 KUNIT_EXPECT_EQ(test, array_size, (u16)TEST_ARRAY_SIZE);
153 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
154 puf->e->start + TEST_ARRAY_BUF_OFFSET + sizeof(u16) + 1);
157 static void policy_unpack_test_unpack_array_with_name(struct kunit *test)
159 struct policy_unpack_fixture *puf = test->priv;
160 const char name[] = TEST_ARRAY_NAME;
163 puf->e->pos += TEST_NAMED_ARRAY_BUF_OFFSET;
165 array_size = aa_unpack_array(puf->e, name);
167 KUNIT_EXPECT_EQ(test, array_size, (u16)TEST_ARRAY_SIZE);
168 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
169 puf->e->start + TEST_ARRAY_BUF_OFFSET + sizeof(u16) + 1);
172 static void policy_unpack_test_unpack_array_out_of_bounds(struct kunit *test)
174 struct policy_unpack_fixture *puf = test->priv;
175 const char name[] = TEST_ARRAY_NAME;
178 puf->e->pos += TEST_NAMED_ARRAY_BUF_OFFSET;
179 puf->e->end = puf->e->start + TEST_ARRAY_BUF_OFFSET + sizeof(u16);
181 array_size = aa_unpack_array(puf->e, name);
183 KUNIT_EXPECT_EQ(test, array_size, 0);
184 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
185 puf->e->start + TEST_NAMED_ARRAY_BUF_OFFSET);
188 static void policy_unpack_test_unpack_blob_with_null_name(struct kunit *test)
190 struct policy_unpack_fixture *puf = test->priv;
194 puf->e->pos += TEST_BLOB_BUF_OFFSET;
195 size = aa_unpack_blob(puf->e, &blob, NULL);
197 KUNIT_ASSERT_EQ(test, size, TEST_BLOB_DATA_SIZE);
198 KUNIT_EXPECT_TRUE(test,
199 memcmp(blob, TEST_BLOB_DATA, TEST_BLOB_DATA_SIZE) == 0);
202 static void policy_unpack_test_unpack_blob_with_name(struct kunit *test)
204 struct policy_unpack_fixture *puf = test->priv;
208 puf->e->pos += TEST_NAMED_BLOB_BUF_OFFSET;
209 size = aa_unpack_blob(puf->e, &blob, TEST_BLOB_NAME);
211 KUNIT_ASSERT_EQ(test, size, TEST_BLOB_DATA_SIZE);
212 KUNIT_EXPECT_TRUE(test,
213 memcmp(blob, TEST_BLOB_DATA, TEST_BLOB_DATA_SIZE) == 0);
216 static void policy_unpack_test_unpack_blob_out_of_bounds(struct kunit *test)
218 struct policy_unpack_fixture *puf = test->priv;
223 puf->e->pos += TEST_NAMED_BLOB_BUF_OFFSET;
225 puf->e->end = puf->e->start + TEST_BLOB_BUF_OFFSET
226 + TEST_BLOB_DATA_SIZE - 1;
228 size = aa_unpack_blob(puf->e, &blob, TEST_BLOB_NAME);
230 KUNIT_EXPECT_EQ(test, size, 0);
231 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, start);
234 static void policy_unpack_test_unpack_str_with_null_name(struct kunit *test)
236 struct policy_unpack_fixture *puf = test->priv;
237 const char *string = NULL;
240 puf->e->pos += TEST_STRING_BUF_OFFSET;
241 size = aa_unpack_str(puf->e, &string, NULL);
243 KUNIT_EXPECT_EQ(test, size, strlen(TEST_STRING_DATA) + 1);
244 KUNIT_EXPECT_STREQ(test, string, TEST_STRING_DATA);
247 static void policy_unpack_test_unpack_str_with_name(struct kunit *test)
249 struct policy_unpack_fixture *puf = test->priv;
250 const char *string = NULL;
253 size = aa_unpack_str(puf->e, &string, TEST_STRING_NAME);
255 KUNIT_EXPECT_EQ(test, size, strlen(TEST_STRING_DATA) + 1);
256 KUNIT_EXPECT_STREQ(test, string, TEST_STRING_DATA);
259 static void policy_unpack_test_unpack_str_out_of_bounds(struct kunit *test)
261 struct policy_unpack_fixture *puf = test->priv;
262 const char *string = NULL;
263 void *start = puf->e->pos;
266 puf->e->end = puf->e->pos + TEST_STRING_BUF_OFFSET
267 + strlen(TEST_STRING_DATA) - 1;
269 size = aa_unpack_str(puf->e, &string, TEST_STRING_NAME);
271 KUNIT_EXPECT_EQ(test, size, 0);
272 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, start);
275 static void policy_unpack_test_unpack_strdup_with_null_name(struct kunit *test)
277 struct policy_unpack_fixture *puf = test->priv;
281 puf->e->pos += TEST_STRING_BUF_OFFSET;
282 size = aa_unpack_strdup(puf->e, &string, NULL);
284 KUNIT_EXPECT_EQ(test, size, strlen(TEST_STRING_DATA) + 1);
285 KUNIT_EXPECT_FALSE(test,
286 ((uintptr_t)puf->e->start <= (uintptr_t)string)
287 && ((uintptr_t)string <= (uintptr_t)puf->e->end));
288 KUNIT_EXPECT_STREQ(test, string, TEST_STRING_DATA);
291 static void policy_unpack_test_unpack_strdup_with_name(struct kunit *test)
293 struct policy_unpack_fixture *puf = test->priv;
297 size = aa_unpack_strdup(puf->e, &string, TEST_STRING_NAME);
299 KUNIT_EXPECT_EQ(test, size, strlen(TEST_STRING_DATA) + 1);
300 KUNIT_EXPECT_FALSE(test,
301 ((uintptr_t)puf->e->start <= (uintptr_t)string)
302 && ((uintptr_t)string <= (uintptr_t)puf->e->end));
303 KUNIT_EXPECT_STREQ(test, string, TEST_STRING_DATA);
306 static void policy_unpack_test_unpack_strdup_out_of_bounds(struct kunit *test)
308 struct policy_unpack_fixture *puf = test->priv;
309 void *start = puf->e->pos;
313 puf->e->end = puf->e->pos + TEST_STRING_BUF_OFFSET
314 + strlen(TEST_STRING_DATA) - 1;
316 size = aa_unpack_strdup(puf->e, &string, TEST_STRING_NAME);
318 KUNIT_EXPECT_EQ(test, size, 0);
319 KUNIT_EXPECT_NULL(test, string);
320 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, start);
323 static void policy_unpack_test_unpack_nameX_with_null_name(struct kunit *test)
325 struct policy_unpack_fixture *puf = test->priv;
328 puf->e->pos += TEST_U32_BUF_OFFSET;
330 success = aa_unpack_nameX(puf->e, AA_U32, NULL);
332 KUNIT_EXPECT_TRUE(test, success);
333 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
334 puf->e->start + TEST_U32_BUF_OFFSET + 1);
337 static void policy_unpack_test_unpack_nameX_with_wrong_code(struct kunit *test)
339 struct policy_unpack_fixture *puf = test->priv;
342 puf->e->pos += TEST_U32_BUF_OFFSET;
344 success = aa_unpack_nameX(puf->e, AA_BLOB, NULL);
346 KUNIT_EXPECT_FALSE(test, success);
347 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
348 puf->e->start + TEST_U32_BUF_OFFSET);
351 static void policy_unpack_test_unpack_nameX_with_name(struct kunit *test)
353 struct policy_unpack_fixture *puf = test->priv;
354 const char name[] = TEST_U32_NAME;
357 puf->e->pos += TEST_NAMED_U32_BUF_OFFSET;
359 success = aa_unpack_nameX(puf->e, AA_U32, name);
361 KUNIT_EXPECT_TRUE(test, success);
362 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
363 puf->e->start + TEST_U32_BUF_OFFSET + 1);
366 static void policy_unpack_test_unpack_nameX_with_wrong_name(struct kunit *test)
368 struct policy_unpack_fixture *puf = test->priv;
369 static const char name[] = "12345678";
372 puf->e->pos += TEST_NAMED_U32_BUF_OFFSET;
374 success = aa_unpack_nameX(puf->e, AA_U32, name);
376 KUNIT_EXPECT_FALSE(test, success);
377 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
378 puf->e->start + TEST_NAMED_U32_BUF_OFFSET);
381 static void policy_unpack_test_unpack_u16_chunk_basic(struct kunit *test)
383 struct policy_unpack_fixture *puf = test->priv;
387 puf->e->pos += TEST_U16_OFFSET;
389 * WARNING: For unit testing purposes, we're pushing puf->e->end past
390 * the end of the allocated memory. Doing anything other than comparing
391 * memory addresses is dangerous.
393 puf->e->end += TEST_U16_DATA;
395 size = aa_unpack_u16_chunk(puf->e, &chunk);
397 KUNIT_EXPECT_PTR_EQ(test, chunk,
398 puf->e->start + TEST_U16_OFFSET + 2);
399 KUNIT_EXPECT_EQ(test, size, TEST_U16_DATA);
400 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, (chunk + TEST_U16_DATA));
403 static void policy_unpack_test_unpack_u16_chunk_out_of_bounds_1(
406 struct policy_unpack_fixture *puf = test->priv;
410 puf->e->pos = puf->e->end - 1;
412 size = aa_unpack_u16_chunk(puf->e, &chunk);
414 KUNIT_EXPECT_EQ(test, size, 0);
415 KUNIT_EXPECT_NULL(test, chunk);
416 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, puf->e->end - 1);
419 static void policy_unpack_test_unpack_u16_chunk_out_of_bounds_2(
422 struct policy_unpack_fixture *puf = test->priv;
426 puf->e->pos += TEST_U16_OFFSET;
428 * WARNING: For unit testing purposes, we're pushing puf->e->end past
429 * the end of the allocated memory. Doing anything other than comparing
430 * memory addresses is dangerous.
432 puf->e->end = puf->e->pos + TEST_U16_DATA - 1;
434 size = aa_unpack_u16_chunk(puf->e, &chunk);
436 KUNIT_EXPECT_EQ(test, size, 0);
437 KUNIT_EXPECT_NULL(test, chunk);
438 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, puf->e->start + TEST_U16_OFFSET);
441 static void policy_unpack_test_unpack_u32_with_null_name(struct kunit *test)
443 struct policy_unpack_fixture *puf = test->priv;
447 puf->e->pos += TEST_U32_BUF_OFFSET;
449 success = aa_unpack_u32(puf->e, &data, NULL);
451 KUNIT_EXPECT_TRUE(test, success);
452 KUNIT_EXPECT_EQ(test, data, TEST_U32_DATA);
453 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
454 puf->e->start + TEST_U32_BUF_OFFSET + sizeof(u32) + 1);
457 static void policy_unpack_test_unpack_u32_with_name(struct kunit *test)
459 struct policy_unpack_fixture *puf = test->priv;
460 const char name[] = TEST_U32_NAME;
464 puf->e->pos += TEST_NAMED_U32_BUF_OFFSET;
466 success = aa_unpack_u32(puf->e, &data, name);
468 KUNIT_EXPECT_TRUE(test, success);
469 KUNIT_EXPECT_EQ(test, data, TEST_U32_DATA);
470 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
471 puf->e->start + TEST_U32_BUF_OFFSET + sizeof(u32) + 1);
474 static void policy_unpack_test_unpack_u32_out_of_bounds(struct kunit *test)
476 struct policy_unpack_fixture *puf = test->priv;
477 const char name[] = TEST_U32_NAME;
481 puf->e->pos += TEST_NAMED_U32_BUF_OFFSET;
482 puf->e->end = puf->e->start + TEST_U32_BUF_OFFSET + sizeof(u32);
484 success = aa_unpack_u32(puf->e, &data, name);
486 KUNIT_EXPECT_FALSE(test, success);
487 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
488 puf->e->start + TEST_NAMED_U32_BUF_OFFSET);
491 static void policy_unpack_test_unpack_u64_with_null_name(struct kunit *test)
493 struct policy_unpack_fixture *puf = test->priv;
497 puf->e->pos += TEST_U64_BUF_OFFSET;
499 success = aa_unpack_u64(puf->e, &data, NULL);
501 KUNIT_EXPECT_TRUE(test, success);
502 KUNIT_EXPECT_EQ(test, data, TEST_U64_DATA);
503 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
504 puf->e->start + TEST_U64_BUF_OFFSET + sizeof(u64) + 1);
507 static void policy_unpack_test_unpack_u64_with_name(struct kunit *test)
509 struct policy_unpack_fixture *puf = test->priv;
510 const char name[] = TEST_U64_NAME;
514 puf->e->pos += TEST_NAMED_U64_BUF_OFFSET;
516 success = aa_unpack_u64(puf->e, &data, name);
518 KUNIT_EXPECT_TRUE(test, success);
519 KUNIT_EXPECT_EQ(test, data, TEST_U64_DATA);
520 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
521 puf->e->start + TEST_U64_BUF_OFFSET + sizeof(u64) + 1);
524 static void policy_unpack_test_unpack_u64_out_of_bounds(struct kunit *test)
526 struct policy_unpack_fixture *puf = test->priv;
527 const char name[] = TEST_U64_NAME;
531 puf->e->pos += TEST_NAMED_U64_BUF_OFFSET;
532 puf->e->end = puf->e->start + TEST_U64_BUF_OFFSET + sizeof(u64);
534 success = aa_unpack_u64(puf->e, &data, name);
536 KUNIT_EXPECT_FALSE(test, success);
537 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
538 puf->e->start + TEST_NAMED_U64_BUF_OFFSET);
541 static void policy_unpack_test_unpack_X_code_match(struct kunit *test)
543 struct policy_unpack_fixture *puf = test->priv;
544 bool success = aa_unpack_X(puf->e, AA_NAME);
546 KUNIT_EXPECT_TRUE(test, success);
547 KUNIT_EXPECT_TRUE(test, puf->e->pos == puf->e->start + 1);
550 static void policy_unpack_test_unpack_X_code_mismatch(struct kunit *test)
552 struct policy_unpack_fixture *puf = test->priv;
553 bool success = aa_unpack_X(puf->e, AA_STRING);
555 KUNIT_EXPECT_FALSE(test, success);
556 KUNIT_EXPECT_TRUE(test, puf->e->pos == puf->e->start);
559 static void policy_unpack_test_unpack_X_out_of_bounds(struct kunit *test)
561 struct policy_unpack_fixture *puf = test->priv;
564 puf->e->pos = puf->e->end;
565 success = aa_unpack_X(puf->e, AA_NAME);
567 KUNIT_EXPECT_FALSE(test, success);
570 static struct kunit_case apparmor_policy_unpack_test_cases[] = {
571 KUNIT_CASE(policy_unpack_test_inbounds_when_inbounds),
572 KUNIT_CASE(policy_unpack_test_inbounds_when_out_of_bounds),
573 KUNIT_CASE(policy_unpack_test_unpack_array_with_null_name),
574 KUNIT_CASE(policy_unpack_test_unpack_array_with_name),
575 KUNIT_CASE(policy_unpack_test_unpack_array_out_of_bounds),
576 KUNIT_CASE(policy_unpack_test_unpack_blob_with_null_name),
577 KUNIT_CASE(policy_unpack_test_unpack_blob_with_name),
578 KUNIT_CASE(policy_unpack_test_unpack_blob_out_of_bounds),
579 KUNIT_CASE(policy_unpack_test_unpack_nameX_with_null_name),
580 KUNIT_CASE(policy_unpack_test_unpack_nameX_with_wrong_code),
581 KUNIT_CASE(policy_unpack_test_unpack_nameX_with_name),
582 KUNIT_CASE(policy_unpack_test_unpack_nameX_with_wrong_name),
583 KUNIT_CASE(policy_unpack_test_unpack_str_with_null_name),
584 KUNIT_CASE(policy_unpack_test_unpack_str_with_name),
585 KUNIT_CASE(policy_unpack_test_unpack_str_out_of_bounds),
586 KUNIT_CASE(policy_unpack_test_unpack_strdup_with_null_name),
587 KUNIT_CASE(policy_unpack_test_unpack_strdup_with_name),
588 KUNIT_CASE(policy_unpack_test_unpack_strdup_out_of_bounds),
589 KUNIT_CASE(policy_unpack_test_unpack_u16_chunk_basic),
590 KUNIT_CASE(policy_unpack_test_unpack_u16_chunk_out_of_bounds_1),
591 KUNIT_CASE(policy_unpack_test_unpack_u16_chunk_out_of_bounds_2),
592 KUNIT_CASE(policy_unpack_test_unpack_u32_with_null_name),
593 KUNIT_CASE(policy_unpack_test_unpack_u32_with_name),
594 KUNIT_CASE(policy_unpack_test_unpack_u32_out_of_bounds),
595 KUNIT_CASE(policy_unpack_test_unpack_u64_with_null_name),
596 KUNIT_CASE(policy_unpack_test_unpack_u64_with_name),
597 KUNIT_CASE(policy_unpack_test_unpack_u64_out_of_bounds),
598 KUNIT_CASE(policy_unpack_test_unpack_X_code_match),
599 KUNIT_CASE(policy_unpack_test_unpack_X_code_mismatch),
600 KUNIT_CASE(policy_unpack_test_unpack_X_out_of_bounds),
604 static struct kunit_suite apparmor_policy_unpack_test_module = {
605 .name = "apparmor_policy_unpack",
606 .init = policy_unpack_test_init,
607 .test_cases = apparmor_policy_unpack_test_cases,
610 kunit_test_suite(apparmor_policy_unpack_test_module);
612 MODULE_LICENSE("GPL");