]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
selftests/bpf: Add testcase where 7th argment is struct
authorPu Lehui <pulehui@huawei.com>
Tue, 2 Jul 2024 12:19:44 +0000 (12:19 +0000)
committerDaniel Borkmann <daniel@iogearbox.net>
Tue, 2 Jul 2024 14:02:02 +0000 (16:02 +0200)
Add testcase where 7th argument is struct for architectures with 8 argument
registers, and increase the complexity of the struct.

Signed-off-by: Pu Lehui <pulehui@huawei.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Björn Töpel <bjorn@rivosinc.com>
Acked-by: Björn Töpel <bjorn@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Link: https://lore.kernel.org/bpf/20240702121944.1091530-4-pulehui@huaweicloud.com
tools/testing/selftests/bpf/DENYLIST.aarch64
tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c
tools/testing/selftests/bpf/prog_tests/tracing_struct.c
tools/testing/selftests/bpf/progs/tracing_struct_many_args.c

index 0445ac38bc07de1337d78a5ce63f6875724403c5..3c7c3e79aa9317947f371c91f4ae94ac2441245f 100644 (file)
@@ -6,6 +6,7 @@ kprobe_multi_test                                # needs CONFIG_FPROBE
 module_attach                                    # prog 'kprobe_multi': failed to auto-attach: -95
 fentry_test/fentry_many_args                     # fentry_many_args:FAIL:fentry_many_args_attach unexpected error: -524
 fexit_test/fexit_many_args                       # fexit_many_args:FAIL:fexit_many_args_attach unexpected error: -524
+tracing_struct/struct_many_args                  # struct_many_args:FAIL:tracing_struct_many_args__attach unexpected error: -524
 fill_link_info/kprobe_multi_link_info            # bpf_program__attach_kprobe_multi_opts unexpected error: -95
 fill_link_info/kretprobe_multi_link_info         # bpf_program__attach_kprobe_multi_opts unexpected error: -95
 fill_link_info/kprobe_multi_invalid_ubuff        # bpf_program__attach_kprobe_multi_opts unexpected error: -95
index d8bd01d8560bbb667dba1794556d466790d26217..f8962a1dd397117ec2e05dce27fad70f18847d9d 100644 (file)
@@ -53,6 +53,13 @@ struct bpf_testmod_struct_arg_4 {
        int b;
 };
 
+struct bpf_testmod_struct_arg_5 {
+       char a;
+       short b;
+       int c;
+       long d;
+};
+
 __bpf_hook_start();
 
 noinline int
@@ -110,6 +117,15 @@ bpf_testmod_test_struct_arg_8(u64 a, void *b, short c, int d, void *e,
        return bpf_testmod_test_struct_arg_result;
 }
 
+noinline int
+bpf_testmod_test_struct_arg_9(u64 a, void *b, short c, int d, void *e, char f,
+                             short g, struct bpf_testmod_struct_arg_5 h, long i)
+{
+       bpf_testmod_test_struct_arg_result = a + (long)b + c + d + (long)e +
+               f + g + h.a + h.b + h.c + h.d + i;
+       return bpf_testmod_test_struct_arg_result;
+}
+
 noinline int
 bpf_testmod_test_arg_ptr_to_struct(struct bpf_testmod_struct_arg_1 *a) {
        bpf_testmod_test_struct_arg_result = a->a;
@@ -305,6 +321,7 @@ bpf_testmod_test_read(struct file *file, struct kobject *kobj,
        struct bpf_testmod_struct_arg_2 struct_arg2 = {2, 3};
        struct bpf_testmod_struct_arg_3 *struct_arg3;
        struct bpf_testmod_struct_arg_4 struct_arg4 = {21, 22};
+       struct bpf_testmod_struct_arg_5 struct_arg5 = {23, 24, 25, 26};
        int i = 1;
 
        while (bpf_testmod_return_ptr(i))
@@ -319,6 +336,8 @@ bpf_testmod_test_read(struct file *file, struct kobject *kobj,
                                            (void *)20, struct_arg4);
        (void)bpf_testmod_test_struct_arg_8(16, (void *)17, 18, 19,
                                            (void *)20, struct_arg4, 23);
+       (void)bpf_testmod_test_struct_arg_9(16, (void *)17, 18, 19, (void *)20,
+                                           21, 22, struct_arg5, 27);
 
        (void)bpf_testmod_test_arg_ptr_to_struct(&struct_arg1_2);
 
index cb2a95da2617c77dc4e3a16df701080b2e0285fa..19e68d4b353278bf8e2917e62f62c89d14d7fe80 100644 (file)
@@ -94,6 +94,20 @@ static void test_struct_many_args(void)
        ASSERT_EQ(skel->bss->t8_g, 23, "t8:g");
        ASSERT_EQ(skel->bss->t8_ret, 156, "t8 ret");
 
+       ASSERT_EQ(skel->bss->t9_a, 16, "t9:a");
+       ASSERT_EQ(skel->bss->t9_b, 17, "t9:b");
+       ASSERT_EQ(skel->bss->t9_c, 18, "t9:c");
+       ASSERT_EQ(skel->bss->t9_d, 19, "t9:d");
+       ASSERT_EQ(skel->bss->t9_e, 20, "t9:e");
+       ASSERT_EQ(skel->bss->t9_f, 21, "t9:f");
+       ASSERT_EQ(skel->bss->t9_g, 22, "t9:f");
+       ASSERT_EQ(skel->bss->t9_h_a, 23, "t9:h.a");
+       ASSERT_EQ(skel->bss->t9_h_b, 24, "t9:h.b");
+       ASSERT_EQ(skel->bss->t9_h_c, 25, "t9:h.c");
+       ASSERT_EQ(skel->bss->t9_h_d, 26, "t9:h.d");
+       ASSERT_EQ(skel->bss->t9_i, 27, "t9:i");
+       ASSERT_EQ(skel->bss->t9_ret, 258, "t9 ret");
+
 destroy_skel:
        tracing_struct_many_args__destroy(skel);
 }
index 3de4bb9181784ba62539f7dfa62b165b44d73756..4742012ace06af949d7f15a21131aaef7ab006e4 100644 (file)
@@ -8,8 +8,16 @@ struct bpf_testmod_struct_arg_4 {
        int b;
 };
 
+struct bpf_testmod_struct_arg_5 {
+       char a;
+       short b;
+       int c;
+       long d;
+};
+
 long t7_a, t7_b, t7_c, t7_d, t7_e, t7_f_a, t7_f_b, t7_ret;
 long t8_a, t8_b, t8_c, t8_d, t8_e, t8_f_a, t8_f_b, t8_g, t8_ret;
+long t9_a, t9_b, t9_c, t9_d, t9_e, t9_f, t9_g, t9_h_a, t9_h_b, t9_h_c, t9_h_d, t9_i, t9_ret;
 
 SEC("fentry/bpf_testmod_test_struct_arg_7")
 int BPF_PROG2(test_struct_many_args_1, __u64, a, void *, b, short, c, int, d,
@@ -57,4 +65,31 @@ int BPF_PROG2(test_struct_many_args_4, __u64, a, void *, b, short, c, int, d,
        return 0;
 }
 
+SEC("fentry/bpf_testmod_test_struct_arg_9")
+int BPF_PROG2(test_struct_many_args_5, __u64, a, void *, b, short, c, int, d, void *, e,
+             char, f, short, g, struct bpf_testmod_struct_arg_5, h, long, i)
+{
+       t9_a = a;
+       t9_b = (long)b;
+       t9_c = c;
+       t9_d = d;
+       t9_e = (long)e;
+       t9_f = f;
+       t9_g = g;
+       t9_h_a = h.a;
+       t9_h_b = h.b;
+       t9_h_c = h.c;
+       t9_h_d = h.d;
+       t9_i = i;
+       return 0;
+}
+
+SEC("fexit/bpf_testmod_test_struct_arg_9")
+int BPF_PROG2(test_struct_many_args_6, __u64, a, void *, b, short, c, int, d, void *, e,
+             char, f, short, g, struct bpf_testmod_struct_arg_5, h, long, i, int, ret)
+{
+       t9_ret = ret;
+       return 0;
+}
+
 char _license[] SEC("license") = "GPL";