xref: /linux/tools/testing/selftests/bpf/progs/verifier_ctx_ptr_param.c (revision f5ad4101009e7f5f5984ffea6923d4fcd470932a)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Verifier tests for single- and multi-level pointer parameter handling
4  * Copyright (c) 2026 CrowdStrike, Inc.
5  */
6 
7 #include <linux/bpf.h>
8 #include <bpf/bpf_helpers.h>
9 #include <bpf/bpf_tracing.h>
10 #include "bpf_misc.h"
11 
12 SEC("fentry/bpf_fentry_test_ppvoid")
13 __description("fentry/void**: void ** inferred as scalar")
14 __success __retval(0)
15 __log_level(2)
16 __msg("R1=ctx() R2=scalar()")
17 __naked void fentry_ppvoid_as_scalar(void)
18 {
19     asm volatile ("					\
20 	r2 = *(u64 *)(r1 + 0);	\
21 	r0 = 0;	\
22 	exit;	\
23 	" ::: __clobber_all);
24 }
25 
26 SEC("fentry/bpf_fentry_test_pppvoid")
27 __description("fentry/void***: void *** inferred as scalar")
28 __success __retval(0)
29 __log_level(2)
30 __msg("R1=ctx() R2=scalar()")
31 __naked void fentry_pppvoid_as_scalar(void)
32 {
33     asm volatile ("					\
34 	r2 = *(u64 *)(r1 + 0);	\
35 	r0 = 0;	\
36 	exit;	\
37 	" ::: __clobber_all);
38 }
39 
40 SEC("fentry/bpf_fentry_test_ppfile")
41 __description("fentry/struct file**: struct file ** inferred as scalar")
42 __success __retval(0)
43 __log_level(2)
44 __msg("R1=ctx() R2=scalar()")
45 __naked void fentry_ppfile_as_scalar(void)
46 {
47     asm volatile ("					\
48 	r2 = *(u64 *)(r1 + 0);	\
49 	r0 = 0;	\
50 	exit;	\
51 	" ::: __clobber_all);
52 }
53 
54 SEC("fexit/bpf_fexit_test_ret_ppfile")
55 __description("fexit/return struct file**: returned struct file ** inferred as scalar")
56 __success __retval(0)
57 __log_level(2)
58 __msg("R1=ctx() R2=scalar()")
59 __naked void fexit_ppfile_as_scalar(void)
60 {
61     asm volatile ("					\
62 	r2 = *(u64 *)(r1 + 0);	\
63 	r0 = 0;	\
64 	exit;	\
65 	" ::: __clobber_all);
66 }
67 
68 char _license[] SEC("license") = "GPL";
69