]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
selftests/bpf: Test cases for '?' in BTF names
authorEduard Zingerman <eddyz87@gmail.com>
Wed, 6 Mar 2024 10:45:29 +0000 (12:45 +0200)
committerAndrii Nakryiko <andrii@kernel.org>
Wed, 6 Mar 2024 23:18:16 +0000 (15:18 -0800)
Two test cases to verify that '?' and other printable characters are
allowed in BTF DATASEC names:
- DATASEC with name "?.foo bar:buz" should be accepted;
- type with name "?foo" should be rejected.

Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20240306104529.6453-16-eddyz87@gmail.com
tools/testing/selftests/bpf/prog_tests/btf.c

index 816145bcb64765dcf9112774aa1fc3c6c518e2ad..00965a6e83bb252f3ee109b6c6b0f4d655a42c87 100644 (file)
@@ -3535,6 +3535,32 @@ static struct btf_raw_test raw_tests[] = {
        .value_type_id = 1,
        .max_entries = 1,
 },
+{
+       .descr = "datasec: name '?.foo bar:buz' is ok",
+       .raw_types = {
+               /* int */
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),  /* [1] */
+               /* VAR x */                                     /* [2] */
+               BTF_TYPE_ENC(1, BTF_INFO_ENC(BTF_KIND_VAR, 0, 0), 1),
+               BTF_VAR_STATIC,
+               /* DATASEC ?.data */                            /* [3] */
+               BTF_TYPE_ENC(3, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
+               BTF_VAR_SECINFO_ENC(2, 0, 4),
+               BTF_END_RAW,
+       },
+       BTF_STR_SEC("\0x\0?.foo bar:buz"),
+},
+{
+       .descr = "type name '?foo' is not ok",
+       .raw_types = {
+               /* union ?foo; */
+               BTF_TYPE_ENC(1, BTF_INFO_ENC(BTF_KIND_FWD, 1, 0), 0), /* [1] */
+               BTF_END_RAW,
+       },
+       BTF_STR_SEC("\0?foo"),
+       .err_str = "Invalid name",
+       .btf_load_err = true,
+},
 
 {
        .descr = "float test #1, well-formed",
@@ -4363,6 +4389,9 @@ static void do_test_raw(unsigned int test_num)
        if (err || btf_fd < 0)
                goto done;
 
+       if (!test->map_type)
+               goto done;
+
        opts.btf_fd = btf_fd;
        opts.btf_key_type_id = test->key_type_id;
        opts.btf_value_type_id = test->value_type_id;