1 // SPDX-License-Identifier: GPL-2.0-only
3 * KUnit tests for AppArmor's policy unpack.
6 #include <kunit/test.h>
8 #include "include/policy.h"
9 #include "include/policy_unpack.h"
11 #define TEST_STRING_NAME "TEST_STRING"
12 #define TEST_STRING_DATA "testing"
13 #define TEST_STRING_BUF_OFFSET \
14 (3 + strlen(TEST_STRING_NAME) + 1)
16 #define TEST_U32_NAME "U32_TEST"
17 #define TEST_U32_DATA ((u32)0x01020304)
18 #define TEST_NAMED_U32_BUF_OFFSET \
19 (TEST_STRING_BUF_OFFSET + 3 + strlen(TEST_STRING_DATA) + 1)
20 #define TEST_U32_BUF_OFFSET \
21 (TEST_NAMED_U32_BUF_OFFSET + 3 + strlen(TEST_U32_NAME) + 1)
23 #define TEST_U16_OFFSET (TEST_U32_BUF_OFFSET + 3)
24 #define TEST_U16_DATA ((u16)(TEST_U32_DATA >> 16))
26 #define TEST_U64_NAME "U64_TEST"
27 #define TEST_U64_DATA ((u64)0x0102030405060708)
28 #define TEST_NAMED_U64_BUF_OFFSET (TEST_U32_BUF_OFFSET + sizeof(u32) + 1)
29 #define TEST_U64_BUF_OFFSET \
30 (TEST_NAMED_U64_BUF_OFFSET + 3 + strlen(TEST_U64_NAME) + 1)
32 #define TEST_BLOB_NAME "BLOB_TEST"
33 #define TEST_BLOB_DATA "\xde\xad\x00\xbe\xef"
34 #define TEST_BLOB_DATA_SIZE (ARRAY_SIZE(TEST_BLOB_DATA))
35 #define TEST_NAMED_BLOB_BUF_OFFSET (TEST_U64_BUF_OFFSET + sizeof(u64) + 1)
36 #define TEST_BLOB_BUF_OFFSET \
37 (TEST_NAMED_BLOB_BUF_OFFSET + 3 + strlen(TEST_BLOB_NAME) + 1)
39 #define TEST_ARRAY_NAME "ARRAY_TEST"
40 #define TEST_ARRAY_SIZE 16
41 #define TEST_NAMED_ARRAY_BUF_OFFSET \
42 (TEST_BLOB_BUF_OFFSET + 5 + TEST_BLOB_DATA_SIZE)
43 #define TEST_ARRAY_BUF_OFFSET \
44 (TEST_NAMED_ARRAY_BUF_OFFSET + 3 + strlen(TEST_ARRAY_NAME) + 1)
46 struct policy_unpack_fixture {
51 static struct aa_ext *build_aa_ext_struct(struct policy_unpack_fixture *puf,
52 struct kunit *test, size_t buf_size)
57 buf = kunit_kzalloc(test, buf_size, GFP_USER);
58 KUNIT_EXPECT_NOT_ERR_OR_NULL(test, buf);
60 e = kunit_kmalloc(test, sizeof(*e), GFP_USER);
61 KUNIT_EXPECT_NOT_ERR_OR_NULL(test, e);
64 e->end = e->start + buf_size;
68 *(buf + 1) = strlen(TEST_STRING_NAME) + 1;
69 strcpy(buf + 3, TEST_STRING_NAME);
71 buf = e->start + TEST_STRING_BUF_OFFSET;
73 *(buf + 1) = strlen(TEST_STRING_DATA) + 1;
74 strcpy(buf + 3, TEST_STRING_DATA);
76 buf = e->start + TEST_NAMED_U32_BUF_OFFSET;
78 *(buf + 1) = strlen(TEST_U32_NAME) + 1;
79 strcpy(buf + 3, TEST_U32_NAME);
80 *(buf + 3 + strlen(TEST_U32_NAME) + 1) = AA_U32;
81 *((u32 *)(buf + 3 + strlen(TEST_U32_NAME) + 2)) = TEST_U32_DATA;
83 buf = e->start + TEST_NAMED_U64_BUF_OFFSET;
85 *(buf + 1) = strlen(TEST_U64_NAME) + 1;
86 strcpy(buf + 3, TEST_U64_NAME);
87 *(buf + 3 + strlen(TEST_U64_NAME) + 1) = AA_U64;
88 *((u64 *)(buf + 3 + strlen(TEST_U64_NAME) + 2)) = TEST_U64_DATA;
90 buf = e->start + TEST_NAMED_BLOB_BUF_OFFSET;
92 *(buf + 1) = strlen(TEST_BLOB_NAME) + 1;
93 strcpy(buf + 3, TEST_BLOB_NAME);
94 *(buf + 3 + strlen(TEST_BLOB_NAME) + 1) = AA_BLOB;
95 *(buf + 3 + strlen(TEST_BLOB_NAME) + 2) = TEST_BLOB_DATA_SIZE;
96 memcpy(buf + 3 + strlen(TEST_BLOB_NAME) + 6,
97 TEST_BLOB_DATA, TEST_BLOB_DATA_SIZE);
99 buf = e->start + TEST_NAMED_ARRAY_BUF_OFFSET;
101 *(buf + 1) = strlen(TEST_ARRAY_NAME) + 1;
102 strcpy(buf + 3, TEST_ARRAY_NAME);
103 *(buf + 3 + strlen(TEST_ARRAY_NAME) + 1) = AA_ARRAY;
104 *((u16 *)(buf + 3 + strlen(TEST_ARRAY_NAME) + 2)) = TEST_ARRAY_SIZE;
109 static int policy_unpack_test_init(struct kunit *test)
111 size_t e_size = TEST_ARRAY_BUF_OFFSET + sizeof(u16) + 1;
112 struct policy_unpack_fixture *puf;
114 puf = kunit_kmalloc(test, sizeof(*puf), GFP_USER);
115 KUNIT_EXPECT_NOT_ERR_OR_NULL(test, puf);
117 puf->e_size = e_size;
118 puf->e = build_aa_ext_struct(puf, test, e_size);
124 static void policy_unpack_test_inbounds_when_inbounds(struct kunit *test)
126 struct policy_unpack_fixture *puf = test->priv;
128 KUNIT_EXPECT_TRUE(test, inbounds(puf->e, 0));
129 KUNIT_EXPECT_TRUE(test, inbounds(puf->e, puf->e_size / 2));
130 KUNIT_EXPECT_TRUE(test, inbounds(puf->e, puf->e_size));
133 static void policy_unpack_test_inbounds_when_out_of_bounds(struct kunit *test)
135 struct policy_unpack_fixture *puf = test->priv;
137 KUNIT_EXPECT_FALSE(test, inbounds(puf->e, puf->e_size + 1));
140 static void policy_unpack_test_unpack_array_with_null_name(struct kunit *test)
142 struct policy_unpack_fixture *puf = test->priv;
145 puf->e->pos += TEST_ARRAY_BUF_OFFSET;
147 KUNIT_EXPECT_EQ(test, unpack_array(puf->e, NULL, &array_size),
149 KUNIT_EXPECT_EQ(test, array_size, (u16)TEST_ARRAY_SIZE);
150 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
151 puf->e->start + TEST_ARRAY_BUF_OFFSET + sizeof(u16) + 1);
154 static void policy_unpack_test_unpack_array_with_name(struct kunit *test)
156 struct policy_unpack_fixture *puf = test->priv;
157 const char name[] = TEST_ARRAY_NAME;
160 puf->e->pos += TEST_NAMED_ARRAY_BUF_OFFSET;
162 KUNIT_EXPECT_EQ(test, unpack_array(puf->e, name, &array_size),
164 KUNIT_EXPECT_EQ(test, array_size, (u16)TEST_ARRAY_SIZE);
165 KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,
166 puf->e->start + TEST_ARRAY_BUF_OFFSET + sizeof(u16) + 1);
169 static void policy_unpack_test_unpack_array_out_of_bounds(struct kunit *test)
171 struct policy_unpack_fixture *puf = test->priv;
172 const char name[] = TEST_ARRAY_NAME;
175 puf->e->pos += TEST_NAMED_ARRAY_BUF_OFFSET;
176 puf->e->end = puf->e->start + TEST_ARRAY_BUF_OFFSET + sizeof(u16);
178 KUNIT_EXPECT_EQ(test, 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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);