OSDN Git Service

tools/bpf: add addition type tests to test_btf
authorYonghong Song <yhs@fb.com>
Tue, 27 Nov 2018 21:23:30 +0000 (13:23 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Dec 2018 13:15:13 +0000 (14:15 +0100)
[ Upstream commit d08489125e04a9f73d9323caea43270fd22d395f ]

The following additional unit testcases are added to test_btf:
...
BTF raw test[42] (typedef (invalid name, name_off = 0)): OK
BTF raw test[43] (typedef (invalid name, invalid identifier)): OK
BTF raw test[44] (ptr type (invalid name, name_off <> 0)): OK
BTF raw test[45] (volatile type (invalid name, name_off <> 0)): OK
BTF raw test[46] (const type (invalid name, name_off <> 0)): OK
BTF raw test[47] (restrict type (invalid name, name_off <> 0)): OK
BTF raw test[48] (fwd type (invalid name, name_off = 0)): OK
BTF raw test[49] (fwd type (invalid name, invalid identifier)): OK
BTF raw test[50] (array type (invalid name, name_off <> 0)): OK
BTF raw test[51] (struct type (name_off = 0)): OK
BTF raw test[52] (struct type (invalid name, invalid identifier)): OK
BTF raw test[53] (struct member (name_off = 0)): OK
BTF raw test[54] (struct member (invalid name, invalid identifier)): OK
BTF raw test[55] (enum type (name_off = 0)): OK
BTF raw test[56] (enum type (invalid name, invalid identifier)): OK
BTF raw test[57] (enum member (invalid name, name_off = 0)): OK
BTF raw test[58] (enum member (invalid name, invalid identifier)): OK
...

Fixes: c0fa1b6c3efc ("bpf: btf: Add BTF tests")
Acked-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/testing/selftests/bpf/test_btf.c

index 4909aab..2911636 100644 (file)
@@ -1292,6 +1292,367 @@ static struct btf_raw_test raw_tests[] = {
 },
 
 {
+       .descr = "typedef (invalid name, name_off = 0)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),  /* [1] */
+               BTF_TYPEDEF_ENC(0, 1),                          /* [2] */
+               BTF_END_RAW,
+       },
+       .str_sec = "\0__int",
+       .str_sec_size = sizeof("\0__int"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "typedef_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+
+{
+       .descr = "typedef (invalid name, invalid identifier)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),  /* [1] */
+               BTF_TYPEDEF_ENC(NAME_TBD, 1),                   /* [2] */
+               BTF_END_RAW,
+       },
+       .str_sec = "\0__!int",
+       .str_sec_size = sizeof("\0__!int"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "typedef_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+
+{
+       .descr = "ptr type (invalid name, name_off <> 0)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(NAME_TBD,
+                            BTF_INFO_ENC(BTF_KIND_PTR, 0, 0), 1),      /* [2] */
+               BTF_END_RAW,
+       },
+       .str_sec = "\0__int",
+       .str_sec_size = sizeof("\0__int"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "ptr_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+
+{
+       .descr = "volatile type (invalid name, name_off <> 0)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(NAME_TBD,
+                            BTF_INFO_ENC(BTF_KIND_VOLATILE, 0, 0), 1), /* [2] */
+               BTF_END_RAW,
+       },
+       .str_sec = "\0__int",
+       .str_sec_size = sizeof("\0__int"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "volatile_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+
+{
+       .descr = "const type (invalid name, name_off <> 0)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(NAME_TBD,
+                            BTF_INFO_ENC(BTF_KIND_CONST, 0, 0), 1),    /* [2] */
+               BTF_END_RAW,
+       },
+       .str_sec = "\0__int",
+       .str_sec_size = sizeof("\0__int"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "const_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+
+{
+       .descr = "restrict type (invalid name, name_off <> 0)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_PTR, 0, 0), 1),   /* [2] */
+               BTF_TYPE_ENC(NAME_TBD,
+                            BTF_INFO_ENC(BTF_KIND_RESTRICT, 0, 0), 2), /* [3] */
+               BTF_END_RAW,
+       },
+       .str_sec = "\0__int",
+       .str_sec_size = sizeof("\0__int"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "restrict_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+
+{
+       .descr = "fwd type (invalid name, name_off = 0)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_FWD, 0, 0), 0),   /* [2] */
+               BTF_END_RAW,
+       },
+       .str_sec = "\0__skb",
+       .str_sec_size = sizeof("\0__skb"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "fwd_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+
+{
+       .descr = "fwd type (invalid name, invalid identifier)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(NAME_TBD,
+                            BTF_INFO_ENC(BTF_KIND_FWD, 0, 0), 0),      /* [2] */
+               BTF_END_RAW,
+       },
+       .str_sec = "\0__!skb",
+       .str_sec_size = sizeof("\0__!skb"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "fwd_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+
+{
+       .descr = "array type (invalid name, name_off <> 0)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(NAME_TBD,
+                            BTF_INFO_ENC(BTF_KIND_ARRAY, 0, 0), 0),    /* [2] */
+               BTF_ARRAY_ENC(1, 1, 4),
+               BTF_END_RAW,
+       },
+       .str_sec = "\0__skb",
+       .str_sec_size = sizeof("\0__skb"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "array_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+
+{
+       .descr = "struct type (name_off = 0)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(0,
+                            BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 1), 4),   /* [2] */
+               BTF_MEMBER_ENC(NAME_TBD, 1, 0),
+               BTF_END_RAW,
+       },
+       .str_sec = "\0A",
+       .str_sec_size = sizeof("\0A"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "struct_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+},
+
+{
+       .descr = "struct type (invalid name, invalid identifier)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(NAME_TBD,
+                            BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 1), 4),   /* [2] */
+               BTF_MEMBER_ENC(NAME_TBD, 1, 0),
+               BTF_END_RAW,
+       },
+       .str_sec = "\0A!\0B",
+       .str_sec_size = sizeof("\0A!\0B"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "struct_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+
+{
+       .descr = "struct member (name_off = 0)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(0,
+                            BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 1), 4),   /* [2] */
+               BTF_MEMBER_ENC(NAME_TBD, 1, 0),
+               BTF_END_RAW,
+       },
+       .str_sec = "\0A",
+       .str_sec_size = sizeof("\0A"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "struct_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+},
+
+{
+       .descr = "struct member (invalid name, invalid identifier)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(NAME_TBD,
+                            BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 1), 4),   /* [2] */
+               BTF_MEMBER_ENC(NAME_TBD, 1, 0),
+               BTF_END_RAW,
+       },
+       .str_sec = "\0A\0B*",
+       .str_sec_size = sizeof("\0A\0B*"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "struct_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+
+{
+       .descr = "enum type (name_off = 0)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(0,
+                            BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1),
+                            sizeof(int)),                              /* [2] */
+               BTF_ENUM_ENC(NAME_TBD, 0),
+               BTF_END_RAW,
+       },
+       .str_sec = "\0A\0B",
+       .str_sec_size = sizeof("\0A\0B"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "enum_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+},
+
+{
+       .descr = "enum type (invalid name, invalid identifier)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(NAME_TBD,
+                            BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1),
+                            sizeof(int)),                              /* [2] */
+               BTF_ENUM_ENC(NAME_TBD, 0),
+               BTF_END_RAW,
+       },
+       .str_sec = "\0A!\0B",
+       .str_sec_size = sizeof("\0A!\0B"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "enum_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+
+{
+       .descr = "enum member (invalid name, name_off = 0)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(0,
+                            BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1),
+                            sizeof(int)),                              /* [2] */
+               BTF_ENUM_ENC(0, 0),
+               BTF_END_RAW,
+       },
+       .str_sec = "",
+       .str_sec_size = sizeof(""),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "enum_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+
+{
+       .descr = "enum member (invalid name, invalid identifier)",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),          /* [1] */
+               BTF_TYPE_ENC(0,
+                            BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1),
+                            sizeof(int)),                              /* [2] */
+               BTF_ENUM_ENC(NAME_TBD, 0),
+               BTF_END_RAW,
+       },
+       .str_sec = "\0A!",
+       .str_sec_size = sizeof("\0A!"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "enum_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+       .btf_load_err = true,
+       .err_str = "Invalid name",
+},
+{
        .descr = "arraymap invalid btf key (a bit field)",
        .raw_types = {
                /* int */                               /* [1] */