Commit 24fe983a authored by Kumar Kartikeya Dwivedi's avatar Kumar Kartikeya Dwivedi Committed by Alexei Starovoitov
Browse files

selftests/bpf: Add tests for type tag order validation



Add a few test cases that ensure we catch cases of badly ordered type
tags in modifier chains.

Signed-off-by: default avatarKumar Kartikeya Dwivedi <memxor@gmail.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Acked-by: default avatarYonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/bpf/20220419164608.1990559-3-memxor@gmail.com
parent eb596b09
Loading
Loading
Loading
Loading
+99 −0
Original line number Diff line number Diff line
@@ -3973,6 +3973,105 @@ static struct btf_raw_test raw_tests[] = {
	.value_type_id = 1,
	.max_entries = 1,
},
{
	.descr = "type_tag test #2, type tag order",
	.raw_types = {
		BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),	/* [1] */
		BTF_CONST_ENC(3),				/* [2] */
		BTF_TYPE_TAG_ENC(NAME_TBD, 1),			/* [3] */
		BTF_END_RAW,
	},
	BTF_STR_SEC("\0tag"),
	.map_type = BPF_MAP_TYPE_ARRAY,
	.map_name = "tag_type_check_btf",
	.key_size = sizeof(int),
	.value_size = 4,
	.key_type_id = 1,
	.value_type_id = 1,
	.max_entries = 1,
	.btf_load_err = true,
	.err_str = "Type tags don't precede modifiers",
},
{
	.descr = "type_tag test #3, type tag order",
	.raw_types = {
		BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),	/* [1] */
		BTF_TYPE_TAG_ENC(NAME_TBD, 3),			/* [2] */
		BTF_CONST_ENC(4),				/* [3] */
		BTF_TYPE_TAG_ENC(NAME_TBD, 1),			/* [4] */
		BTF_END_RAW,
	},
	BTF_STR_SEC("\0tag\0tag"),
	.map_type = BPF_MAP_TYPE_ARRAY,
	.map_name = "tag_type_check_btf",
	.key_size = sizeof(int),
	.value_size = 4,
	.key_type_id = 1,
	.value_type_id = 1,
	.max_entries = 1,
	.btf_load_err = true,
	.err_str = "Type tags don't precede modifiers",
},
{
	.descr = "type_tag test #4, type tag order",
	.raw_types = {
		BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),	/* [1] */
		BTF_TYPEDEF_ENC(NAME_TBD, 3),			/* [2] */
		BTF_CONST_ENC(4),				/* [3] */
		BTF_TYPE_TAG_ENC(NAME_TBD, 1),			/* [4] */
		BTF_END_RAW,
	},
	BTF_STR_SEC("\0tag\0tag"),
	.map_type = BPF_MAP_TYPE_ARRAY,
	.map_name = "tag_type_check_btf",
	.key_size = sizeof(int),
	.value_size = 4,
	.key_type_id = 1,
	.value_type_id = 1,
	.max_entries = 1,
	.btf_load_err = true,
	.err_str = "Type tags don't precede modifiers",
},
{
	.descr = "type_tag test #5, type tag order",
	.raw_types = {
		BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),	/* [1] */
		BTF_TYPE_TAG_ENC(NAME_TBD, 3),			/* [2] */
		BTF_CONST_ENC(1),				/* [3] */
		BTF_TYPE_TAG_ENC(NAME_TBD, 2),			/* [4] */
		BTF_END_RAW,
	},
	BTF_STR_SEC("\0tag\0tag"),
	.map_type = BPF_MAP_TYPE_ARRAY,
	.map_name = "tag_type_check_btf",
	.key_size = sizeof(int),
	.value_size = 4,
	.key_type_id = 1,
	.value_type_id = 1,
	.max_entries = 1,
},
{
	.descr = "type_tag test #6, type tag order",
	.raw_types = {
		BTF_PTR_ENC(2),					/* [1] */
		BTF_TYPE_TAG_ENC(NAME_TBD, 3),			/* [2] */
		BTF_CONST_ENC(4),				/* [3] */
		BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),  /* [4] */
		BTF_PTR_ENC(6),					/* [5] */
		BTF_CONST_ENC(2),				/* [6] */
		BTF_END_RAW,
	},
	BTF_STR_SEC("\0tag"),
	.map_type = BPF_MAP_TYPE_ARRAY,
	.map_name = "tag_type_check_btf",
	.key_size = sizeof(int),
	.value_size = 4,
	.key_type_id = 1,
	.value_type_id = 1,
	.max_entries = 1,
	.btf_load_err = true,
	.err_str = "Type tags don't precede modifiers",
},

}; /* struct btf_raw_test raw_tests[] */