Path: blob/master/security/apparmor/policy_unpack_test.c
26378 views
// SPDX-License-Identifier: GPL-2.0-only1/*2* KUnit tests for AppArmor's policy unpack.3*/45#include <kunit/test.h>6#include <kunit/visibility.h>78#include "include/policy.h"9#include "include/policy_unpack.h"1011#include <linux/unaligned.h>1213#define TEST_STRING_NAME "TEST_STRING"14#define TEST_STRING_DATA "testing"15#define TEST_STRING_BUF_OFFSET \16(3 + strlen(TEST_STRING_NAME) + 1)1718#define TEST_U32_NAME "U32_TEST"19#define TEST_U32_DATA ((u32)0x01020304)20#define TEST_NAMED_U32_BUF_OFFSET \21(TEST_STRING_BUF_OFFSET + 3 + strlen(TEST_STRING_DATA) + 1)22#define TEST_U32_BUF_OFFSET \23(TEST_NAMED_U32_BUF_OFFSET + 3 + strlen(TEST_U32_NAME) + 1)2425#define TEST_U16_OFFSET (TEST_U32_BUF_OFFSET + 3)26#define TEST_U16_DATA ((u16)(TEST_U32_DATA >> 16))2728#define TEST_U64_NAME "U64_TEST"29#define TEST_U64_DATA ((u64)0x0102030405060708)30#define TEST_NAMED_U64_BUF_OFFSET (TEST_U32_BUF_OFFSET + sizeof(u32) + 1)31#define TEST_U64_BUF_OFFSET \32(TEST_NAMED_U64_BUF_OFFSET + 3 + strlen(TEST_U64_NAME) + 1)3334#define TEST_BLOB_NAME "BLOB_TEST"35#define TEST_BLOB_DATA "\xde\xad\x00\xbe\xef"36#define TEST_BLOB_DATA_SIZE (ARRAY_SIZE(TEST_BLOB_DATA))37#define TEST_NAMED_BLOB_BUF_OFFSET (TEST_U64_BUF_OFFSET + sizeof(u64) + 1)38#define TEST_BLOB_BUF_OFFSET \39(TEST_NAMED_BLOB_BUF_OFFSET + 3 + strlen(TEST_BLOB_NAME) + 1)4041#define TEST_ARRAY_NAME "ARRAY_TEST"42#define TEST_ARRAY_SIZE 1643#define TEST_NAMED_ARRAY_BUF_OFFSET \44(TEST_BLOB_BUF_OFFSET + 5 + TEST_BLOB_DATA_SIZE)45#define TEST_ARRAY_BUF_OFFSET \46(TEST_NAMED_ARRAY_BUF_OFFSET + 3 + strlen(TEST_ARRAY_NAME) + 1)4748MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");4950struct policy_unpack_fixture {51struct aa_ext *e;52size_t e_size;53};5455static struct aa_ext *build_aa_ext_struct(struct policy_unpack_fixture *puf,56struct kunit *test, size_t buf_size)57{58char *buf;59struct aa_ext *e;6061buf = kunit_kzalloc(test, buf_size, GFP_USER);62KUNIT_EXPECT_NOT_ERR_OR_NULL(test, buf);6364e = kunit_kmalloc(test, sizeof(*e), GFP_USER);65KUNIT_EXPECT_NOT_ERR_OR_NULL(test, e);6667e->start = buf;68e->end = e->start + buf_size;69e->pos = e->start;7071*buf = AA_NAME;72*(buf + 1) = strlen(TEST_STRING_NAME) + 1;73strscpy(buf + 3, TEST_STRING_NAME, e->end - (void *)(buf + 3));7475buf = e->start + TEST_STRING_BUF_OFFSET;76*buf = AA_STRING;77*(buf + 1) = strlen(TEST_STRING_DATA) + 1;78strscpy(buf + 3, TEST_STRING_DATA, e->end - (void *)(buf + 3));79buf = e->start + TEST_NAMED_U32_BUF_OFFSET;80*buf = AA_NAME;81*(buf + 1) = strlen(TEST_U32_NAME) + 1;82strscpy(buf + 3, TEST_U32_NAME, e->end - (void *)(buf + 3));83*(buf + 3 + strlen(TEST_U32_NAME) + 1) = AA_U32;84put_unaligned_le32(TEST_U32_DATA, buf + 3 + strlen(TEST_U32_NAME) + 2);8586buf = e->start + TEST_NAMED_U64_BUF_OFFSET;87*buf = AA_NAME;88*(buf + 1) = strlen(TEST_U64_NAME) + 1;89strscpy(buf + 3, TEST_U64_NAME, e->end - (void *)(buf + 3));90*(buf + 3 + strlen(TEST_U64_NAME) + 1) = AA_U64;91*((__le64 *)(buf + 3 + strlen(TEST_U64_NAME) + 2)) = cpu_to_le64(TEST_U64_DATA);9293buf = e->start + TEST_NAMED_BLOB_BUF_OFFSET;94*buf = AA_NAME;95*(buf + 1) = strlen(TEST_BLOB_NAME) + 1;96strscpy(buf + 3, TEST_BLOB_NAME, e->end - (void *)(buf + 3));97*(buf + 3 + strlen(TEST_BLOB_NAME) + 1) = AA_BLOB;98*(buf + 3 + strlen(TEST_BLOB_NAME) + 2) = TEST_BLOB_DATA_SIZE;99memcpy(buf + 3 + strlen(TEST_BLOB_NAME) + 6,100TEST_BLOB_DATA, TEST_BLOB_DATA_SIZE);101102buf = e->start + TEST_NAMED_ARRAY_BUF_OFFSET;103*buf = AA_NAME;104*(buf + 1) = strlen(TEST_ARRAY_NAME) + 1;105strscpy(buf + 3, TEST_ARRAY_NAME, e->end - (void *)(buf + 3));106*(buf + 3 + strlen(TEST_ARRAY_NAME) + 1) = AA_ARRAY;107put_unaligned_le16(TEST_ARRAY_SIZE, buf + 3 + strlen(TEST_ARRAY_NAME) + 2);108109return e;110}111112static int policy_unpack_test_init(struct kunit *test)113{114size_t e_size = TEST_ARRAY_BUF_OFFSET + sizeof(u16) + 1;115struct policy_unpack_fixture *puf;116117puf = kunit_kmalloc(test, sizeof(*puf), GFP_USER);118KUNIT_EXPECT_NOT_ERR_OR_NULL(test, puf);119120puf->e_size = e_size;121puf->e = build_aa_ext_struct(puf, test, e_size);122123test->priv = puf;124return 0;125}126127static void policy_unpack_test_inbounds_when_inbounds(struct kunit *test)128{129struct policy_unpack_fixture *puf = test->priv;130131KUNIT_EXPECT_TRUE(test, aa_inbounds(puf->e, 0));132KUNIT_EXPECT_TRUE(test, aa_inbounds(puf->e, puf->e_size / 2));133KUNIT_EXPECT_TRUE(test, aa_inbounds(puf->e, puf->e_size));134}135136static void policy_unpack_test_inbounds_when_out_of_bounds(struct kunit *test)137{138struct policy_unpack_fixture *puf = test->priv;139140KUNIT_EXPECT_FALSE(test, aa_inbounds(puf->e, puf->e_size + 1));141}142143static void policy_unpack_test_unpack_array_with_null_name(struct kunit *test)144{145struct policy_unpack_fixture *puf = test->priv;146u16 array_size = 0;147148puf->e->pos += TEST_ARRAY_BUF_OFFSET;149150KUNIT_EXPECT_TRUE(test, aa_unpack_array(puf->e, NULL, &array_size));151KUNIT_EXPECT_EQ(test, array_size, (u16)TEST_ARRAY_SIZE);152KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,153puf->e->start + TEST_ARRAY_BUF_OFFSET + sizeof(u16) + 1);154}155156static void policy_unpack_test_unpack_array_with_name(struct kunit *test)157{158struct policy_unpack_fixture *puf = test->priv;159const char name[] = TEST_ARRAY_NAME;160u16 array_size = 0;161162puf->e->pos += TEST_NAMED_ARRAY_BUF_OFFSET;163164KUNIT_EXPECT_TRUE(test, aa_unpack_array(puf->e, name, &array_size));165KUNIT_EXPECT_EQ(test, array_size, (u16)TEST_ARRAY_SIZE);166KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,167puf->e->start + TEST_ARRAY_BUF_OFFSET + sizeof(u16) + 1);168}169170static void policy_unpack_test_unpack_array_out_of_bounds(struct kunit *test)171{172struct policy_unpack_fixture *puf = test->priv;173const char name[] = TEST_ARRAY_NAME;174u16 array_size;175176puf->e->pos += TEST_NAMED_ARRAY_BUF_OFFSET;177puf->e->end = puf->e->start + TEST_ARRAY_BUF_OFFSET + sizeof(u16);178179KUNIT_EXPECT_FALSE(test, aa_unpack_array(puf->e, name, &array_size));180KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,181puf->e->start + TEST_NAMED_ARRAY_BUF_OFFSET);182}183184static void policy_unpack_test_unpack_blob_with_null_name(struct kunit *test)185{186struct policy_unpack_fixture *puf = test->priv;187char *blob = NULL;188size_t size;189190puf->e->pos += TEST_BLOB_BUF_OFFSET;191size = aa_unpack_blob(puf->e, &blob, NULL);192193KUNIT_ASSERT_EQ(test, size, TEST_BLOB_DATA_SIZE);194KUNIT_EXPECT_TRUE(test,195memcmp(blob, TEST_BLOB_DATA, TEST_BLOB_DATA_SIZE) == 0);196}197198static void policy_unpack_test_unpack_blob_with_name(struct kunit *test)199{200struct policy_unpack_fixture *puf = test->priv;201char *blob = NULL;202size_t size;203204puf->e->pos += TEST_NAMED_BLOB_BUF_OFFSET;205size = aa_unpack_blob(puf->e, &blob, TEST_BLOB_NAME);206207KUNIT_ASSERT_EQ(test, size, TEST_BLOB_DATA_SIZE);208KUNIT_EXPECT_TRUE(test,209memcmp(blob, TEST_BLOB_DATA, TEST_BLOB_DATA_SIZE) == 0);210}211212static void policy_unpack_test_unpack_blob_out_of_bounds(struct kunit *test)213{214struct policy_unpack_fixture *puf = test->priv;215char *blob = NULL;216void *start;217int size;218219puf->e->pos += TEST_NAMED_BLOB_BUF_OFFSET;220start = puf->e->pos;221puf->e->end = puf->e->start + TEST_BLOB_BUF_OFFSET222+ TEST_BLOB_DATA_SIZE - 1;223224size = aa_unpack_blob(puf->e, &blob, TEST_BLOB_NAME);225226KUNIT_EXPECT_EQ(test, size, 0);227KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, start);228}229230static void policy_unpack_test_unpack_str_with_null_name(struct kunit *test)231{232struct policy_unpack_fixture *puf = test->priv;233const char *string = NULL;234size_t size;235236puf->e->pos += TEST_STRING_BUF_OFFSET;237size = aa_unpack_str(puf->e, &string, NULL);238239KUNIT_EXPECT_EQ(test, size, strlen(TEST_STRING_DATA) + 1);240KUNIT_EXPECT_STREQ(test, string, TEST_STRING_DATA);241}242243static void policy_unpack_test_unpack_str_with_name(struct kunit *test)244{245struct policy_unpack_fixture *puf = test->priv;246const char *string = NULL;247size_t size;248249size = aa_unpack_str(puf->e, &string, TEST_STRING_NAME);250251KUNIT_EXPECT_EQ(test, size, strlen(TEST_STRING_DATA) + 1);252KUNIT_EXPECT_STREQ(test, string, TEST_STRING_DATA);253}254255static void policy_unpack_test_unpack_str_out_of_bounds(struct kunit *test)256{257struct policy_unpack_fixture *puf = test->priv;258const char *string = NULL;259void *start = puf->e->pos;260int size;261262puf->e->end = puf->e->pos + TEST_STRING_BUF_OFFSET263+ strlen(TEST_STRING_DATA) - 1;264265size = aa_unpack_str(puf->e, &string, TEST_STRING_NAME);266267KUNIT_EXPECT_EQ(test, size, 0);268KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, start);269}270271static void policy_unpack_test_unpack_strdup_with_null_name(struct kunit *test)272{273struct policy_unpack_fixture *puf = test->priv;274char *string = NULL;275size_t size;276277puf->e->pos += TEST_STRING_BUF_OFFSET;278size = aa_unpack_strdup(puf->e, &string, NULL);279280KUNIT_EXPECT_EQ(test, size, strlen(TEST_STRING_DATA) + 1);281KUNIT_EXPECT_FALSE(test,282((uintptr_t)puf->e->start <= (uintptr_t)string)283&& ((uintptr_t)string <= (uintptr_t)puf->e->end));284KUNIT_EXPECT_STREQ(test, string, TEST_STRING_DATA);285286kfree(string);287}288289static void policy_unpack_test_unpack_strdup_with_name(struct kunit *test)290{291struct policy_unpack_fixture *puf = test->priv;292char *string = NULL;293size_t size;294295size = aa_unpack_strdup(puf->e, &string, TEST_STRING_NAME);296297KUNIT_EXPECT_EQ(test, size, strlen(TEST_STRING_DATA) + 1);298KUNIT_EXPECT_FALSE(test,299((uintptr_t)puf->e->start <= (uintptr_t)string)300&& ((uintptr_t)string <= (uintptr_t)puf->e->end));301KUNIT_EXPECT_STREQ(test, string, TEST_STRING_DATA);302303kfree(string);304}305306static void policy_unpack_test_unpack_strdup_out_of_bounds(struct kunit *test)307{308struct policy_unpack_fixture *puf = test->priv;309void *start = puf->e->pos;310char *string = NULL;311int size;312313puf->e->end = puf->e->pos + TEST_STRING_BUF_OFFSET314+ strlen(TEST_STRING_DATA) - 1;315316size = aa_unpack_strdup(puf->e, &string, TEST_STRING_NAME);317318KUNIT_EXPECT_EQ(test, size, 0);319KUNIT_EXPECT_NULL(test, string);320KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, start);321322kfree(string);323}324325static void policy_unpack_test_unpack_nameX_with_null_name(struct kunit *test)326{327struct policy_unpack_fixture *puf = test->priv;328bool success;329330puf->e->pos += TEST_U32_BUF_OFFSET;331332success = aa_unpack_nameX(puf->e, AA_U32, NULL);333334KUNIT_EXPECT_TRUE(test, success);335KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,336puf->e->start + TEST_U32_BUF_OFFSET + 1);337}338339static void policy_unpack_test_unpack_nameX_with_wrong_code(struct kunit *test)340{341struct policy_unpack_fixture *puf = test->priv;342bool success;343344puf->e->pos += TEST_U32_BUF_OFFSET;345346success = aa_unpack_nameX(puf->e, AA_BLOB, NULL);347348KUNIT_EXPECT_FALSE(test, success);349KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,350puf->e->start + TEST_U32_BUF_OFFSET);351}352353static void policy_unpack_test_unpack_nameX_with_name(struct kunit *test)354{355struct policy_unpack_fixture *puf = test->priv;356const char name[] = TEST_U32_NAME;357bool success;358359puf->e->pos += TEST_NAMED_U32_BUF_OFFSET;360361success = aa_unpack_nameX(puf->e, AA_U32, name);362363KUNIT_EXPECT_TRUE(test, success);364KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,365puf->e->start + TEST_U32_BUF_OFFSET + 1);366}367368static void policy_unpack_test_unpack_nameX_with_wrong_name(struct kunit *test)369{370struct policy_unpack_fixture *puf = test->priv;371static const char name[] = "12345678";372bool success;373374puf->e->pos += TEST_NAMED_U32_BUF_OFFSET;375376success = aa_unpack_nameX(puf->e, AA_U32, name);377378KUNIT_EXPECT_FALSE(test, success);379KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,380puf->e->start + TEST_NAMED_U32_BUF_OFFSET);381}382383static void policy_unpack_test_unpack_u16_chunk_basic(struct kunit *test)384{385struct policy_unpack_fixture *puf = test->priv;386char *chunk = NULL;387size_t size;388389puf->e->pos += TEST_U16_OFFSET;390/*391* WARNING: For unit testing purposes, we're pushing puf->e->end past392* the end of the allocated memory. Doing anything other than comparing393* memory addresses is dangerous.394*/395puf->e->end += TEST_U16_DATA;396397size = aa_unpack_u16_chunk(puf->e, &chunk);398399KUNIT_EXPECT_PTR_EQ(test, chunk,400puf->e->start + TEST_U16_OFFSET + 2);401KUNIT_EXPECT_EQ(test, size, TEST_U16_DATA);402KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, (chunk + TEST_U16_DATA));403}404405static void policy_unpack_test_unpack_u16_chunk_out_of_bounds_1(406struct kunit *test)407{408struct policy_unpack_fixture *puf = test->priv;409char *chunk = NULL;410size_t size;411412puf->e->pos = puf->e->end - 1;413414size = aa_unpack_u16_chunk(puf->e, &chunk);415416KUNIT_EXPECT_EQ(test, size, 0);417KUNIT_EXPECT_NULL(test, chunk);418KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, puf->e->end - 1);419}420421static void policy_unpack_test_unpack_u16_chunk_out_of_bounds_2(422struct kunit *test)423{424struct policy_unpack_fixture *puf = test->priv;425char *chunk = NULL;426size_t size;427428puf->e->pos += TEST_U16_OFFSET;429/*430* WARNING: For unit testing purposes, we're pushing puf->e->end past431* the end of the allocated memory. Doing anything other than comparing432* memory addresses is dangerous.433*/434puf->e->end = puf->e->pos + TEST_U16_DATA - 1;435436size = aa_unpack_u16_chunk(puf->e, &chunk);437438KUNIT_EXPECT_EQ(test, size, 0);439KUNIT_EXPECT_NULL(test, chunk);440KUNIT_EXPECT_PTR_EQ(test, puf->e->pos, puf->e->start + TEST_U16_OFFSET);441}442443static void policy_unpack_test_unpack_u32_with_null_name(struct kunit *test)444{445struct policy_unpack_fixture *puf = test->priv;446bool success;447u32 data = 0;448449puf->e->pos += TEST_U32_BUF_OFFSET;450451success = aa_unpack_u32(puf->e, &data, NULL);452453KUNIT_EXPECT_TRUE(test, success);454KUNIT_EXPECT_EQ(test, data, TEST_U32_DATA);455KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,456puf->e->start + TEST_U32_BUF_OFFSET + sizeof(u32) + 1);457}458459static void policy_unpack_test_unpack_u32_with_name(struct kunit *test)460{461struct policy_unpack_fixture *puf = test->priv;462const char name[] = TEST_U32_NAME;463bool success;464u32 data = 0;465466puf->e->pos += TEST_NAMED_U32_BUF_OFFSET;467468success = aa_unpack_u32(puf->e, &data, name);469470KUNIT_EXPECT_TRUE(test, success);471KUNIT_EXPECT_EQ(test, data, TEST_U32_DATA);472KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,473puf->e->start + TEST_U32_BUF_OFFSET + sizeof(u32) + 1);474}475476static void policy_unpack_test_unpack_u32_out_of_bounds(struct kunit *test)477{478struct policy_unpack_fixture *puf = test->priv;479const char name[] = TEST_U32_NAME;480bool success;481u32 data = 0;482483puf->e->pos += TEST_NAMED_U32_BUF_OFFSET;484puf->e->end = puf->e->start + TEST_U32_BUF_OFFSET + sizeof(u32);485486success = aa_unpack_u32(puf->e, &data, name);487488KUNIT_EXPECT_FALSE(test, success);489KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,490puf->e->start + TEST_NAMED_U32_BUF_OFFSET);491}492493static void policy_unpack_test_unpack_u64_with_null_name(struct kunit *test)494{495struct policy_unpack_fixture *puf = test->priv;496bool success;497u64 data = 0;498499puf->e->pos += TEST_U64_BUF_OFFSET;500501success = aa_unpack_u64(puf->e, &data, NULL);502503KUNIT_EXPECT_TRUE(test, success);504KUNIT_EXPECT_EQ(test, data, TEST_U64_DATA);505KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,506puf->e->start + TEST_U64_BUF_OFFSET + sizeof(u64) + 1);507}508509static void policy_unpack_test_unpack_u64_with_name(struct kunit *test)510{511struct policy_unpack_fixture *puf = test->priv;512const char name[] = TEST_U64_NAME;513bool success;514u64 data = 0;515516puf->e->pos += TEST_NAMED_U64_BUF_OFFSET;517518success = aa_unpack_u64(puf->e, &data, name);519520KUNIT_EXPECT_TRUE(test, success);521KUNIT_EXPECT_EQ(test, data, TEST_U64_DATA);522KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,523puf->e->start + TEST_U64_BUF_OFFSET + sizeof(u64) + 1);524}525526static void policy_unpack_test_unpack_u64_out_of_bounds(struct kunit *test)527{528struct policy_unpack_fixture *puf = test->priv;529const char name[] = TEST_U64_NAME;530bool success;531u64 data = 0;532533puf->e->pos += TEST_NAMED_U64_BUF_OFFSET;534puf->e->end = puf->e->start + TEST_U64_BUF_OFFSET + sizeof(u64);535536success = aa_unpack_u64(puf->e, &data, name);537538KUNIT_EXPECT_FALSE(test, success);539KUNIT_EXPECT_PTR_EQ(test, puf->e->pos,540puf->e->start + TEST_NAMED_U64_BUF_OFFSET);541}542543static void policy_unpack_test_unpack_X_code_match(struct kunit *test)544{545struct policy_unpack_fixture *puf = test->priv;546bool success = aa_unpack_X(puf->e, AA_NAME);547548KUNIT_EXPECT_TRUE(test, success);549KUNIT_EXPECT_TRUE(test, puf->e->pos == puf->e->start + 1);550}551552static void policy_unpack_test_unpack_X_code_mismatch(struct kunit *test)553{554struct policy_unpack_fixture *puf = test->priv;555bool success = aa_unpack_X(puf->e, AA_STRING);556557KUNIT_EXPECT_FALSE(test, success);558KUNIT_EXPECT_TRUE(test, puf->e->pos == puf->e->start);559}560561static void policy_unpack_test_unpack_X_out_of_bounds(struct kunit *test)562{563struct policy_unpack_fixture *puf = test->priv;564bool success;565566puf->e->pos = puf->e->end;567success = aa_unpack_X(puf->e, AA_NAME);568569KUNIT_EXPECT_FALSE(test, success);570}571572static struct kunit_case apparmor_policy_unpack_test_cases[] = {573KUNIT_CASE(policy_unpack_test_inbounds_when_inbounds),574KUNIT_CASE(policy_unpack_test_inbounds_when_out_of_bounds),575KUNIT_CASE(policy_unpack_test_unpack_array_with_null_name),576KUNIT_CASE(policy_unpack_test_unpack_array_with_name),577KUNIT_CASE(policy_unpack_test_unpack_array_out_of_bounds),578KUNIT_CASE(policy_unpack_test_unpack_blob_with_null_name),579KUNIT_CASE(policy_unpack_test_unpack_blob_with_name),580KUNIT_CASE(policy_unpack_test_unpack_blob_out_of_bounds),581KUNIT_CASE(policy_unpack_test_unpack_nameX_with_null_name),582KUNIT_CASE(policy_unpack_test_unpack_nameX_with_wrong_code),583KUNIT_CASE(policy_unpack_test_unpack_nameX_with_name),584KUNIT_CASE(policy_unpack_test_unpack_nameX_with_wrong_name),585KUNIT_CASE(policy_unpack_test_unpack_str_with_null_name),586KUNIT_CASE(policy_unpack_test_unpack_str_with_name),587KUNIT_CASE(policy_unpack_test_unpack_str_out_of_bounds),588KUNIT_CASE(policy_unpack_test_unpack_strdup_with_null_name),589KUNIT_CASE(policy_unpack_test_unpack_strdup_with_name),590KUNIT_CASE(policy_unpack_test_unpack_strdup_out_of_bounds),591KUNIT_CASE(policy_unpack_test_unpack_u16_chunk_basic),592KUNIT_CASE(policy_unpack_test_unpack_u16_chunk_out_of_bounds_1),593KUNIT_CASE(policy_unpack_test_unpack_u16_chunk_out_of_bounds_2),594KUNIT_CASE(policy_unpack_test_unpack_u32_with_null_name),595KUNIT_CASE(policy_unpack_test_unpack_u32_with_name),596KUNIT_CASE(policy_unpack_test_unpack_u32_out_of_bounds),597KUNIT_CASE(policy_unpack_test_unpack_u64_with_null_name),598KUNIT_CASE(policy_unpack_test_unpack_u64_with_name),599KUNIT_CASE(policy_unpack_test_unpack_u64_out_of_bounds),600KUNIT_CASE(policy_unpack_test_unpack_X_code_match),601KUNIT_CASE(policy_unpack_test_unpack_X_code_mismatch),602KUNIT_CASE(policy_unpack_test_unpack_X_out_of_bounds),603{},604};605606static struct kunit_suite apparmor_policy_unpack_test_module = {607.name = "apparmor_policy_unpack",608.init = policy_unpack_test_init,609.test_cases = apparmor_policy_unpack_test_cases,610};611612kunit_test_suite(apparmor_policy_unpack_test_module);613614MODULE_DESCRIPTION("KUnit tests for AppArmor's policy unpack");615MODULE_LICENSE("GPL");616617618