selftests/bpf: Add tests for type tag order validation
authorKumar Kartikeya Dwivedi <memxor@gmail.com>
Tue, 19 Apr 2022 16:46:08 +0000 (22:16 +0530)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 19 Apr 2022 21:02:49 +0000 (14:02 -0700)
Add a few test cases that ensure we catch cases of badly ordered type
tags in modifier chains.

Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Yonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/bpf/20220419164608.1990559-3-memxor@gmail.com
tools/testing/selftests/bpf/prog_tests/btf.c

index 84aae63..ba5bde5 100644 (file)
@@ -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[] */