]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
selftests/bpf: Add test to access const void pointer argument in tracing program
authorKaFai Wan <mannkafai@gmail.com>
Wed, 23 Apr 2025 12:13:29 +0000 (20:13 +0800)
committerAndrii Nakryiko <andrii@kernel.org>
Wed, 23 Apr 2025 18:26:22 +0000 (11:26 -0700)
Adding verifier test for accessing const void pointer argument in
tracing programs.

The test program loads 1st argument of bpf_fentry_test10 function
which is const void pointer and checks that verifier allows that.

Signed-off-by: KaFai Wan <mannkafai@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Link: https://lore.kernel.org/bpf/20250423121329.3163461-3-mannkafai@gmail.com
net/bpf/test_run.c
tools/testing/selftests/bpf/progs/verifier_btf_ctx_access.c

index 7cb192cbd65f322baf11882adaee27adaacb4820..aaf13a7d58eda25d52b88e1b457be0350af9ceea 100644 (file)
@@ -569,6 +569,11 @@ __bpf_kfunc u32 bpf_fentry_test9(u32 *a)
        return *a;
 }
 
+int noinline bpf_fentry_test10(const void *a)
+{
+       return (long)a;
+}
+
 void noinline bpf_fentry_test_sinfo(struct skb_shared_info *sinfo)
 {
 }
@@ -699,7 +704,8 @@ int bpf_prog_test_run_tracing(struct bpf_prog *prog,
                    bpf_fentry_test6(16, (void *)17, 18, 19, (void *)20, 21) != 111 ||
                    bpf_fentry_test7((struct bpf_fentry_test_t *)0) != 0 ||
                    bpf_fentry_test8(&arg) != 0 ||
-                   bpf_fentry_test9(&retval) != 0)
+                   bpf_fentry_test9(&retval) != 0 ||
+                   bpf_fentry_test10((void *)0) != 0)
                        goto out;
                break;
        case BPF_MODIFY_RETURN:
index 28b939572cdadf2e3f0a19400629335921040bf6..03942cec07e56b6ae9f75670f2ff4e72a4938e24 100644 (file)
@@ -65,4 +65,16 @@ __naked void ctx_access_u32_pointer_reject_8(void)
 "      ::: __clobber_all);
 }
 
+SEC("fentry/bpf_fentry_test10")
+__description("btf_ctx_access const void pointer accept")
+__success __retval(0)
+__naked void ctx_access_const_void_pointer_accept(void)
+{
+       asm volatile ("                                 \
+       r2 = *(u64 *)(r1 + 0);          /* load 1st argument value (const void pointer) */\
+       r0 = 0;                                         \
+       exit;                                           \
+"      ::: __clobber_all);
+}
+
 char _license[] SEC("license") = "GPL";