1 #include "bpf_experimental.h"
12 struct val_with_ptr_t {
16 struct val_with_rb_root_t {
17 struct bpf_spin_lock lock;
26 struct val_t __percpu_kptr *pc;
30 __uint(type, BPF_MAP_TYPE_ARRAY);
31 __uint(max_entries, 1);
33 __type(value, struct elem);
38 SEC("?fentry/bpf_fentry_test1")
39 __failure __msg("store to referenced kptr disallowed")
40 int BPF_PROG(test_array_map_1)
42 struct val_t __percpu_kptr *p;
46 e = bpf_map_lookup_elem(&array, &index);
50 p = bpf_percpu_obj_new(struct val_t);
54 p = bpf_kptr_xchg(&e->pc, p);
56 bpf_percpu_obj_drop(p);
58 e->pc = (struct val_t __percpu_kptr *)ret;
62 SEC("?fentry/bpf_fentry_test1")
63 __failure __msg("invalid kptr access, R2 type=percpu_ptr_val2_t expected=ptr_val_t")
64 int BPF_PROG(test_array_map_2)
66 struct val2_t __percpu_kptr *p2;
67 struct val_t __percpu_kptr *p;
71 e = bpf_map_lookup_elem(&array, &index);
75 p2 = bpf_percpu_obj_new(struct val2_t);
79 p = bpf_kptr_xchg(&e->pc, p2);
81 bpf_percpu_obj_drop(p);
86 SEC("?fentry.s/bpf_fentry_test1")
87 __failure __msg("R1 type=scalar expected=percpu_ptr_, percpu_rcu_ptr_, percpu_trusted_ptr_")
88 int BPF_PROG(test_array_map_3)
90 struct val_t __percpu_kptr *p, *p1;
95 e = bpf_map_lookup_elem(&array, &index);
99 p = bpf_percpu_obj_new(struct val_t);
103 p1 = bpf_kptr_xchg(&e->pc, p);
105 bpf_percpu_obj_drop(p1);
107 v = bpf_this_cpu_ptr(p);
112 SEC("?fentry.s/bpf_fentry_test1")
113 __failure __msg("arg#0 expected for bpf_percpu_obj_drop_impl()")
114 int BPF_PROG(test_array_map_4)
116 struct val_t __percpu_kptr *p;
118 p = bpf_percpu_obj_new(struct val_t);
126 SEC("?fentry.s/bpf_fentry_test1")
127 __failure __msg("arg#0 expected for bpf_obj_drop_impl()")
128 int BPF_PROG(test_array_map_5)
132 p = bpf_obj_new(struct val_t);
136 bpf_percpu_obj_drop(p);
140 SEC("?fentry.s/bpf_fentry_test1")
141 __failure __msg("bpf_percpu_obj_new type ID argument must be of a struct of scalars")
142 int BPF_PROG(test_array_map_6)
144 struct val_with_ptr_t __percpu_kptr *p;
146 p = bpf_percpu_obj_new(struct val_with_ptr_t);
150 bpf_percpu_obj_drop(p);
154 SEC("?fentry.s/bpf_fentry_test1")
155 __failure __msg("bpf_percpu_obj_new type ID argument must not contain special fields")
156 int BPF_PROG(test_array_map_7)
158 struct val_with_rb_root_t __percpu_kptr *p;
160 p = bpf_percpu_obj_new(struct val_with_rb_root_t);
164 bpf_percpu_obj_drop(p);
168 SEC("?fentry.s/bpf_fentry_test1")
169 __failure __msg("bpf_percpu_obj_new type size (600) is greater than 512")
170 int BPF_PROG(test_array_map_8)
172 struct val_600b_t __percpu_kptr *p;
174 p = bpf_percpu_obj_new(struct val_600b_t);
178 bpf_percpu_obj_drop(p);
182 char _license[] SEC("license") = "GPL";