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 KUNIT_EXPECT_TRUE(test, aa_unpack_array(puf->e, NULL, &array_size));
151 KUNIT_EXPECT_EQ(test, array_size, (u16)TEST_ARRAY_SIZE);
152 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
153 puf->e->start + TEST_ARRAY_BUF_OFFSET + sizeof(u16) + 1);
156 static void policy_unpack_test_unpack_array_with_name(struct kunit *test)
158 struct policy_unpack_fixture *puf = test->priv;
159 const char name[] = TEST_ARRAY_NAME;
162 puf->e->pos += TEST_NAMED_ARRAY_BUF_OFFSET;
164 KUNIT_EXPECT_TRUE(test, aa_unpack_array(puf->e, name, &array_size));
165 KUNIT_EXPECT_EQ(test, array_size, (u16)TEST_ARRAY_SIZE);
166 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
167 puf->e->start + TEST_ARRAY_BUF_OFFSET + sizeof(u16) + 1);
170 static void policy_unpack_test_unpack_array_out_of_bounds(struct kunit *test)
172 struct policy_unpack_fixture *puf = test->priv;
173 const char name[] = TEST_ARRAY_NAME;
176 puf->e->pos += TEST_NAMED_ARRAY_BUF_OFFSET;
177 puf->e->end = puf->e->start + TEST_ARRAY_BUF_OFFSET + sizeof(u16);
179 KUNIT_EXPECT_FALSE(test, aa_unpack_array(puf->e, name, &array_size));
180 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
181 puf->e->start + TEST_NAMED_ARRAY_BUF_OFFSET);
184 static void policy_unpack_test_unpack_blob_with_null_name(struct kunit *test)
186 struct policy_unpack_fixture *puf = test->priv;
190 puf->e->pos += TEST_BLOB_BUF_OFFSET;
191 size = aa_unpack_blob(puf->e, &blob, NULL);
193 KUNIT_ASSERT_EQ(test, size, TEST_BLOB_DATA_SIZE);
194 KUNIT_EXPECT_TRUE(test,
195 memcmp(blob, TEST_BLOB_DATA, TEST_BLOB_DATA_SIZE) == 0);
198 static void policy_unpack_test_unpack_blob_with_name(struct kunit *test)
200 struct policy_unpack_fixture *puf = test->priv;
204 puf->e->pos += TEST_NAMED_BLOB_BUF_OFFSET;
205 size = aa_unpack_blob(puf->e, &blob, TEST_BLOB_NAME);
207 KUNIT_ASSERT_EQ(test, size, TEST_BLOB_DATA_SIZE);
208 KUNIT_EXPECT_TRUE(test,
209 memcmp(blob, TEST_BLOB_DATA, TEST_BLOB_DATA_SIZE) == 0);
212 static void policy_unpack_test_unpack_blob_out_of_bounds(struct kunit *test)
214 struct policy_unpack_fixture *puf = test->priv;
219 puf->e->pos += TEST_NAMED_BLOB_BUF_OFFSET;
221 puf->e->end = puf->e->start + TEST_BLOB_BUF_OFFSET
222 + TEST_BLOB_DATA_SIZE - 1;
224 size = aa_unpack_blob(puf->e, &blob, TEST_BLOB_NAME);
226 KUNIT_EXPECT_EQ(test, size, 0);
227 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, start);
230 static void policy_unpack_test_unpack_str_with_null_name(struct kunit *test)
232 struct policy_unpack_fixture *puf = test->priv;
233 const char *string = NULL;
236 puf->e->pos += TEST_STRING_BUF_OFFSET;
237 size = aa_unpack_str(puf->e, &string, NULL);
239 KUNIT_EXPECT_EQ(test, size, strlen(TEST_STRING_DATA) + 1);
240 KUNIT_EXPECT_STREQ(test, string, TEST_STRING_DATA);
243 static void policy_unpack_test_unpack_str_with_name(struct kunit *test)
245 struct policy_unpack_fixture *puf = test->priv;
246 const char *string = NULL;
249 size = aa_unpack_str(puf->e, &string, TEST_STRING_NAME);
251 KUNIT_EXPECT_EQ(test, size, strlen(TEST_STRING_DATA) + 1);
252 KUNIT_EXPECT_STREQ(test, string, TEST_STRING_DATA);
255 static void policy_unpack_test_unpack_str_out_of_bounds(struct kunit *test)
257 struct policy_unpack_fixture *puf = test->priv;
258 const char *string = NULL;
259 void *start = puf->e->pos;
262 puf->e->end = puf->e->pos + TEST_STRING_BUF_OFFSET
263 + strlen(TEST_STRING_DATA) - 1;
265 size = aa_unpack_str(puf->e, &string, TEST_STRING_NAME);
267 KUNIT_EXPECT_EQ(test, size, 0);
268 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, start);
271 static void policy_unpack_test_unpack_strdup_with_null_name(struct kunit *test)
273 struct policy_unpack_fixture *puf = test->priv;
277 puf->e->pos += TEST_STRING_BUF_OFFSET;
278 size = aa_unpack_strdup(puf->e, &string, NULL);
280 KUNIT_EXPECT_EQ(test, size, strlen(TEST_STRING_DATA) + 1);
281 KUNIT_EXPECT_FALSE(test,
282 ((uintptr_t)puf->e->start <= (uintptr_t)string)
283 && ((uintptr_t)string <= (uintptr_t)puf->e->end));
284 KUNIT_EXPECT_STREQ(test, string, TEST_STRING_DATA);
287 static void policy_unpack_test_unpack_strdup_with_name(struct kunit *test)
289 struct policy_unpack_fixture *puf = test->priv;
293 size = aa_unpack_strdup(puf->e, &string, TEST_STRING_NAME);
295 KUNIT_EXPECT_EQ(test, size, strlen(TEST_STRING_DATA) + 1);
296 KUNIT_EXPECT_FALSE(test,
297 ((uintptr_t)puf->e->start <= (uintptr_t)string)
298 && ((uintptr_t)string <= (uintptr_t)puf->e->end));
299 KUNIT_EXPECT_STREQ(test, string, TEST_STRING_DATA);
302 static void policy_unpack_test_unpack_strdup_out_of_bounds(struct kunit *test)
304 struct policy_unpack_fixture *puf = test->priv;
305 void *start = puf->e->pos;
309 puf->e->end = puf->e->pos + TEST_STRING_BUF_OFFSET
310 + strlen(TEST_STRING_DATA) - 1;
312 size = aa_unpack_strdup(puf->e, &string, TEST_STRING_NAME);
314 KUNIT_EXPECT_EQ(test, size, 0);
315 KUNIT_EXPECT_NULL(test, string);
316 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, start);
319 static void policy_unpack_test_unpack_nameX_with_null_name(struct kunit *test)
321 struct policy_unpack_fixture *puf = test->priv;
324 puf->e->pos += TEST_U32_BUF_OFFSET;
326 success = aa_unpack_nameX(puf->e, AA_U32, NULL);
328 KUNIT_EXPECT_TRUE(test, success);
329 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
330 puf->e->start + TEST_U32_BUF_OFFSET + 1);
333 static void policy_unpack_test_unpack_nameX_with_wrong_code(struct kunit *test)
335 struct policy_unpack_fixture *puf = test->priv;
338 puf->e->pos += TEST_U32_BUF_OFFSET;
340 success = aa_unpack_nameX(puf->e, AA_BLOB, NULL);
342 KUNIT_EXPECT_FALSE(test, success);
343 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
344 puf->e->start + TEST_U32_BUF_OFFSET);
347 static void policy_unpack_test_unpack_nameX_with_name(struct kunit *test)
349 struct policy_unpack_fixture *puf = test->priv;
350 const char name[] = TEST_U32_NAME;
353 puf->e->pos += TEST_NAMED_U32_BUF_OFFSET;
355 success = aa_unpack_nameX(puf->e, AA_U32, name);
357 KUNIT_EXPECT_TRUE(test, success);
358 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
359 puf->e->start + TEST_U32_BUF_OFFSET + 1);
362 static void policy_unpack_test_unpack_nameX_with_wrong_name(struct kunit *test)
364 struct policy_unpack_fixture *puf = test->priv;
365 static const char name[] = "12345678";
368 puf->e->pos += TEST_NAMED_U32_BUF_OFFSET;
370 success = aa_unpack_nameX(puf->e, AA_U32, name);
372 KUNIT_EXPECT_FALSE(test, success);
373 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
374 puf->e->start + TEST_NAMED_U32_BUF_OFFSET);
377 static void policy_unpack_test_unpack_u16_chunk_basic(struct kunit *test)
379 struct policy_unpack_fixture *puf = test->priv;
383 puf->e->pos += TEST_U16_OFFSET;
385 * WARNING: For unit testing purposes, we're pushing puf->e->end past
386 * the end of the allocated memory. Doing anything other than comparing
387 * memory addresses is dangerous.
389 puf->e->end += TEST_U16_DATA;
391 size = aa_unpack_u16_chunk(puf->e, &chunk);
393 KUNIT_EXPECT_PTR_EQ(test, chunk,
394 puf->e->start + TEST_U16_OFFSET + 2);
395 KUNIT_EXPECT_EQ(test, size, TEST_U16_DATA);
396 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, (chunk + TEST_U16_DATA));
399 static void policy_unpack_test_unpack_u16_chunk_out_of_bounds_1(
402 struct policy_unpack_fixture *puf = test->priv;
406 puf->e->pos = puf->e->end - 1;
408 size = aa_unpack_u16_chunk(puf->e, &chunk);
410 KUNIT_EXPECT_EQ(test, size, 0);
411 KUNIT_EXPECT_NULL(test, chunk);
412 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, puf->e->end - 1);
415 static void policy_unpack_test_unpack_u16_chunk_out_of_bounds_2(
418 struct policy_unpack_fixture *puf = test->priv;
422 puf->e->pos += TEST_U16_OFFSET;
424 * WARNING: For unit testing purposes, we're pushing puf->e->end past
425 * the end of the allocated memory. Doing anything other than comparing
426 * memory addresses is dangerous.
428 puf->e->end = puf->e->pos + TEST_U16_DATA - 1;
430 size = aa_unpack_u16_chunk(puf->e, &chunk);
432 KUNIT_EXPECT_EQ(test, size, 0);
433 KUNIT_EXPECT_NULL(test, chunk);
434 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, puf->e->start + TEST_U16_OFFSET);
437 static void policy_unpack_test_unpack_u32_with_null_name(struct kunit *test)
439 struct policy_unpack_fixture *puf = test->priv;
443 puf->e->pos += TEST_U32_BUF_OFFSET;
445 success = aa_unpack_u32(puf->e, &data, NULL);
447 KUNIT_EXPECT_TRUE(test, success);
448 KUNIT_EXPECT_EQ(test, data, TEST_U32_DATA);
449 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
450 puf->e->start + TEST_U32_BUF_OFFSET + sizeof(u32) + 1);
453 static void policy_unpack_test_unpack_u32_with_name(struct kunit *test)
455 struct policy_unpack_fixture *puf = test->priv;
456 const char name[] = TEST_U32_NAME;
460 puf->e->pos += TEST_NAMED_U32_BUF_OFFSET;
462 success = aa_unpack_u32(puf->e, &data, name);
464 KUNIT_EXPECT_TRUE(test, success);
465 KUNIT_EXPECT_EQ(test, data, TEST_U32_DATA);
466 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
467 puf->e->start + TEST_U32_BUF_OFFSET + sizeof(u32) + 1);
470 static void policy_unpack_test_unpack_u32_out_of_bounds(struct kunit *test)
472 struct policy_unpack_fixture *puf = test->priv;
473 const char name[] = TEST_U32_NAME;
477 puf->e->pos += TEST_NAMED_U32_BUF_OFFSET;
478 puf->e->end = puf->e->start + TEST_U32_BUF_OFFSET + sizeof(u32);
480 success = aa_unpack_u32(puf->e, &data, name);
482 KUNIT_EXPECT_FALSE(test, success);
483 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
484 puf->e->start + TEST_NAMED_U32_BUF_OFFSET);
487 static void policy_unpack_test_unpack_u64_with_null_name(struct kunit *test)
489 struct policy_unpack_fixture *puf = test->priv;
493 puf->e->pos += TEST_U64_BUF_OFFSET;
495 success = aa_unpack_u64(puf->e, &data, NULL);
497 KUNIT_EXPECT_TRUE(test, success);
498 KUNIT_EXPECT_EQ(test, data, TEST_U64_DATA);
499 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
500 puf->e->start + TEST_U64_BUF_OFFSET + sizeof(u64) + 1);
503 static void policy_unpack_test_unpack_u64_with_name(struct kunit *test)
505 struct policy_unpack_fixture *puf = test->priv;
506 const char name[] = TEST_U64_NAME;
510 puf->e->pos += TEST_NAMED_U64_BUF_OFFSET;
512 success = aa_unpack_u64(puf->e, &data, name);
514 KUNIT_EXPECT_TRUE(test, success);
515 KUNIT_EXPECT_EQ(test, data, TEST_U64_DATA);
516 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
517 puf->e->start + TEST_U64_BUF_OFFSET + sizeof(u64) + 1);
520 static void policy_unpack_test_unpack_u64_out_of_bounds(struct kunit *test)
522 struct policy_unpack_fixture *puf = test->priv;
523 const char name[] = TEST_U64_NAME;
527 puf->e->pos += TEST_NAMED_U64_BUF_OFFSET;
528 puf->e->end = puf->e->start + TEST_U64_BUF_OFFSET + sizeof(u64);
530 success = aa_unpack_u64(puf->e, &data, name);
532 KUNIT_EXPECT_FALSE(test, success);
533 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
534 puf->e->start + TEST_NAMED_U64_BUF_OFFSET);
537 static void policy_unpack_test_unpack_X_code_match(struct kunit *test)
539 struct policy_unpack_fixture *puf = test->priv;
540 bool success = aa_unpack_X(puf->e, AA_NAME);
542 KUNIT_EXPECT_TRUE(test, success);
543 KUNIT_EXPECT_TRUE(test, puf->e->pos == puf->e->start + 1);
546 static void policy_unpack_test_unpack_X_code_mismatch(struct kunit *test)
548 struct policy_unpack_fixture *puf = test->priv;
549 bool success = aa_unpack_X(puf->e, AA_STRING);
551 KUNIT_EXPECT_FALSE(test, success);
552 KUNIT_EXPECT_TRUE(test, puf->e->pos == puf->e->start);
555 static void policy_unpack_test_unpack_X_out_of_bounds(struct kunit *test)
557 struct policy_unpack_fixture *puf = test->priv;
560 puf->e->pos = puf->e->end;
561 success = aa_unpack_X(puf->e, AA_NAME);
563 KUNIT_EXPECT_FALSE(test, success);
566 static struct kunit_case apparmor_policy_unpack_test_cases[] = {
567 KUNIT_CASE(policy_unpack_test_inbounds_when_inbounds),
568 KUNIT_CASE(policy_unpack_test_inbounds_when_out_of_bounds),
569 KUNIT_CASE(policy_unpack_test_unpack_array_with_null_name),
570 KUNIT_CASE(policy_unpack_test_unpack_array_with_name),
571 KUNIT_CASE(policy_unpack_test_unpack_array_out_of_bounds),
572 KUNIT_CASE(policy_unpack_test_unpack_blob_with_null_name),
573 KUNIT_CASE(policy_unpack_test_unpack_blob_with_name),
574 KUNIT_CASE(policy_unpack_test_unpack_blob_out_of_bounds),
575 KUNIT_CASE(policy_unpack_test_unpack_nameX_with_null_name),
576 KUNIT_CASE(policy_unpack_test_unpack_nameX_with_wrong_code),
577 KUNIT_CASE(policy_unpack_test_unpack_nameX_with_name),
578 KUNIT_CASE(policy_unpack_test_unpack_nameX_with_wrong_name),
579 KUNIT_CASE(policy_unpack_test_unpack_str_with_null_name),
580 KUNIT_CASE(policy_unpack_test_unpack_str_with_name),
581 KUNIT_CASE(policy_unpack_test_unpack_str_out_of_bounds),
582 KUNIT_CASE(policy_unpack_test_unpack_strdup_with_null_name),
583 KUNIT_CASE(policy_unpack_test_unpack_strdup_with_name),
584 KUNIT_CASE(policy_unpack_test_unpack_strdup_out_of_bounds),
585 KUNIT_CASE(policy_unpack_test_unpack_u16_chunk_basic),
586 KUNIT_CASE(policy_unpack_test_unpack_u16_chunk_out_of_bounds_1),
587 KUNIT_CASE(policy_unpack_test_unpack_u16_chunk_out_of_bounds_2),
588 KUNIT_CASE(policy_unpack_test_unpack_u32_with_null_name),
589 KUNIT_CASE(policy_unpack_test_unpack_u32_with_name),
590 KUNIT_CASE(policy_unpack_test_unpack_u32_out_of_bounds),
591 KUNIT_CASE(policy_unpack_test_unpack_u64_with_null_name),
592 KUNIT_CASE(policy_unpack_test_unpack_u64_with_name),
593 KUNIT_CASE(policy_unpack_test_unpack_u64_out_of_bounds),
594 KUNIT_CASE(policy_unpack_test_unpack_X_code_match),
595 KUNIT_CASE(policy_unpack_test_unpack_X_code_mismatch),
596 KUNIT_CASE(policy_unpack_test_unpack_X_out_of_bounds),
600 static struct kunit_suite apparmor_policy_unpack_test_module = {
601 .name = "apparmor_policy_unpack",
602 .init = policy_unpack_test_init,
603 .test_cases = apparmor_policy_unpack_test_cases,
606 kunit_test_suite(apparmor_policy_unpack_test_module);
608 MODULE_LICENSE("GPL");