Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
  1// SPDX-License-Identifier: GPL-2.0
  2/* Converted from tools/testing/selftests/bpf/verifier/helper_restricted.c */
  3
  4#include <linux/bpf.h>
  5#include <bpf/bpf_helpers.h>
  6#include "bpf_misc.h"
  7
  8struct val {
  9	int cnt;
 10	struct bpf_spin_lock l;
 11};
 12
 13struct {
 14	__uint(type, BPF_MAP_TYPE_ARRAY);
 15	__uint(max_entries, 1);
 16	__type(key, int);
 17	__type(value, struct val);
 18} map_spin_lock SEC(".maps");
 19
 20struct timer {
 21	struct bpf_timer t;
 22};
 23
 24struct {
 25	__uint(type, BPF_MAP_TYPE_ARRAY);
 26	__uint(max_entries, 1);
 27	__type(key, int);
 28	__type(value, struct timer);
 29} map_timer SEC(".maps");
 30
 31SEC("kprobe")
 32__description("bpf_ktime_get_coarse_ns is forbidden in BPF_PROG_TYPE_KPROBE")
 33__failure __msg("program of this type cannot use helper bpf_ktime_get_coarse_ns")
 34__naked void in_bpf_prog_type_kprobe_1(void)
 35{
 36	asm volatile ("					\
 37	call %[bpf_ktime_get_coarse_ns];		\
 38	r0 = 0;						\
 39	exit;						\
 40"	:
 41	: __imm(bpf_ktime_get_coarse_ns)
 42	: __clobber_all);
 43}
 44
 45SEC("tracepoint")
 46__description("bpf_ktime_get_coarse_ns is forbidden in BPF_PROG_TYPE_TRACEPOINT")
 47__failure __msg("program of this type cannot use helper bpf_ktime_get_coarse_ns")
 48__naked void in_bpf_prog_type_tracepoint_1(void)
 49{
 50	asm volatile ("					\
 51	call %[bpf_ktime_get_coarse_ns];		\
 52	r0 = 0;						\
 53	exit;						\
 54"	:
 55	: __imm(bpf_ktime_get_coarse_ns)
 56	: __clobber_all);
 57}
 58
 59SEC("perf_event")
 60__description("bpf_ktime_get_coarse_ns is forbidden in BPF_PROG_TYPE_PERF_EVENT")
 61__failure __msg("program of this type cannot use helper bpf_ktime_get_coarse_ns")
 62__naked void bpf_prog_type_perf_event_1(void)
 63{
 64	asm volatile ("					\
 65	call %[bpf_ktime_get_coarse_ns];		\
 66	r0 = 0;						\
 67	exit;						\
 68"	:
 69	: __imm(bpf_ktime_get_coarse_ns)
 70	: __clobber_all);
 71}
 72
 73SEC("raw_tracepoint")
 74__description("bpf_ktime_get_coarse_ns is forbidden in BPF_PROG_TYPE_RAW_TRACEPOINT")
 75__failure __msg("program of this type cannot use helper bpf_ktime_get_coarse_ns")
 76__naked void bpf_prog_type_raw_tracepoint_1(void)
 77{
 78	asm volatile ("					\
 79	call %[bpf_ktime_get_coarse_ns];		\
 80	r0 = 0;						\
 81	exit;						\
 82"	:
 83	: __imm(bpf_ktime_get_coarse_ns)
 84	: __clobber_all);
 85}
 86
 87SEC("kprobe")
 88__description("bpf_timer_init isn restricted in BPF_PROG_TYPE_KPROBE")
 89__failure __msg("tracing progs cannot use bpf_timer yet")
 90__naked void in_bpf_prog_type_kprobe_2(void)
 91{
 92	asm volatile ("					\
 93	r2 = r10;					\
 94	r2 += -8;					\
 95	r1 = 0;						\
 96	*(u64*)(r2 + 0) = r1;				\
 97	r1 = %[map_timer] ll;				\
 98	call %[bpf_map_lookup_elem];			\
 99	if r0 == 0 goto l0_%=;				\
100	r1 = r0;					\
101	r2 = %[map_timer] ll;				\
102	r3 = 1;						\
103l0_%=:	call %[bpf_timer_init];				\
104	exit;						\
105"	:
106	: __imm(bpf_map_lookup_elem),
107	  __imm(bpf_timer_init),
108	  __imm_addr(map_timer)
109	: __clobber_all);
110}
111
112SEC("perf_event")
113__description("bpf_timer_init is forbidden in BPF_PROG_TYPE_PERF_EVENT")
114__failure __msg("tracing progs cannot use bpf_timer yet")
115__naked void bpf_prog_type_perf_event_2(void)
116{
117	asm volatile ("					\
118	r2 = r10;					\
119	r2 += -8;					\
120	r1 = 0;						\
121	*(u64*)(r2 + 0) = r1;				\
122	r1 = %[map_timer] ll;				\
123	call %[bpf_map_lookup_elem];			\
124	if r0 == 0 goto l0_%=;				\
125	r1 = r0;					\
126	r2 = %[map_timer] ll;				\
127	r3 = 1;						\
128l0_%=:	call %[bpf_timer_init];				\
129	exit;						\
130"	:
131	: __imm(bpf_map_lookup_elem),
132	  __imm(bpf_timer_init),
133	  __imm_addr(map_timer)
134	: __clobber_all);
135}
136
137SEC("tracepoint")
138__description("bpf_timer_init is forbidden in BPF_PROG_TYPE_TRACEPOINT")
139__failure __msg("tracing progs cannot use bpf_timer yet")
140__naked void in_bpf_prog_type_tracepoint_2(void)
141{
142	asm volatile ("					\
143	r2 = r10;					\
144	r2 += -8;					\
145	r1 = 0;						\
146	*(u64*)(r2 + 0) = r1;				\
147	r1 = %[map_timer] ll;				\
148	call %[bpf_map_lookup_elem];			\
149	if r0 == 0 goto l0_%=;				\
150	r1 = r0;					\
151	r2 = %[map_timer] ll;				\
152	r3 = 1;						\
153l0_%=:	call %[bpf_timer_init];				\
154	exit;						\
155"	:
156	: __imm(bpf_map_lookup_elem),
157	  __imm(bpf_timer_init),
158	  __imm_addr(map_timer)
159	: __clobber_all);
160}
161
162SEC("raw_tracepoint")
163__description("bpf_timer_init is forbidden in BPF_PROG_TYPE_RAW_TRACEPOINT")
164__failure __msg("tracing progs cannot use bpf_timer yet")
165__naked void bpf_prog_type_raw_tracepoint_2(void)
166{
167	asm volatile ("					\
168	r2 = r10;					\
169	r2 += -8;					\
170	r1 = 0;						\
171	*(u64*)(r2 + 0) = r1;				\
172	r1 = %[map_timer] ll;				\
173	call %[bpf_map_lookup_elem];			\
174	if r0 == 0 goto l0_%=;				\
175	r1 = r0;					\
176	r2 = %[map_timer] ll;				\
177	r3 = 1;						\
178l0_%=:	call %[bpf_timer_init];				\
179	exit;						\
180"	:
181	: __imm(bpf_map_lookup_elem),
182	  __imm(bpf_timer_init),
183	  __imm_addr(map_timer)
184	: __clobber_all);
185}
186
187SEC("kprobe")
188__description("bpf_spin_lock is forbidden in BPF_PROG_TYPE_KPROBE")
189__failure __msg("tracing progs cannot use bpf_spin_lock yet")
190__naked void in_bpf_prog_type_kprobe_3(void)
191{
192	asm volatile ("					\
193	r2 = r10;					\
194	r2 += -8;					\
195	r1 = 0;						\
196	*(u64*)(r2 + 0) = r1;				\
197	r1 = %[map_spin_lock] ll;			\
198	call %[bpf_map_lookup_elem];			\
199	if r0 == 0 goto l0_%=;				\
200	r1 = r0;					\
201	call %[bpf_spin_lock];				\
202l0_%=:	exit;						\
203"	:
204	: __imm(bpf_map_lookup_elem),
205	  __imm(bpf_spin_lock),
206	  __imm_addr(map_spin_lock)
207	: __clobber_all);
208}
209
210SEC("tracepoint")
211__description("bpf_spin_lock is forbidden in BPF_PROG_TYPE_TRACEPOINT")
212__failure __msg("tracing progs cannot use bpf_spin_lock yet")
213__naked void in_bpf_prog_type_tracepoint_3(void)
214{
215	asm volatile ("					\
216	r2 = r10;					\
217	r2 += -8;					\
218	r1 = 0;						\
219	*(u64*)(r2 + 0) = r1;				\
220	r1 = %[map_spin_lock] ll;			\
221	call %[bpf_map_lookup_elem];			\
222	if r0 == 0 goto l0_%=;				\
223	r1 = r0;					\
224	call %[bpf_spin_lock];				\
225l0_%=:	exit;						\
226"	:
227	: __imm(bpf_map_lookup_elem),
228	  __imm(bpf_spin_lock),
229	  __imm_addr(map_spin_lock)
230	: __clobber_all);
231}
232
233SEC("perf_event")
234__description("bpf_spin_lock is forbidden in BPF_PROG_TYPE_PERF_EVENT")
235__failure __msg("tracing progs cannot use bpf_spin_lock yet")
236__naked void bpf_prog_type_perf_event_3(void)
237{
238	asm volatile ("					\
239	r2 = r10;					\
240	r2 += -8;					\
241	r1 = 0;						\
242	*(u64*)(r2 + 0) = r1;				\
243	r1 = %[map_spin_lock] ll;			\
244	call %[bpf_map_lookup_elem];			\
245	if r0 == 0 goto l0_%=;				\
246	r1 = r0;					\
247	call %[bpf_spin_lock];				\
248l0_%=:	exit;						\
249"	:
250	: __imm(bpf_map_lookup_elem),
251	  __imm(bpf_spin_lock),
252	  __imm_addr(map_spin_lock)
253	: __clobber_all);
254}
255
256SEC("raw_tracepoint")
257__description("bpf_spin_lock is forbidden in BPF_PROG_TYPE_RAW_TRACEPOINT")
258__failure __msg("tracing progs cannot use bpf_spin_lock yet")
259__naked void bpf_prog_type_raw_tracepoint_3(void)
260{
261	asm volatile ("					\
262	r2 = r10;					\
263	r2 += -8;					\
264	r1 = 0;						\
265	*(u64*)(r2 + 0) = r1;				\
266	r1 = %[map_spin_lock] ll;			\
267	call %[bpf_map_lookup_elem];			\
268	if r0 == 0 goto l0_%=;				\
269	r1 = r0;					\
270	call %[bpf_spin_lock];				\
271l0_%=:	exit;						\
272"	:
273	: __imm(bpf_map_lookup_elem),
274	  __imm(bpf_spin_lock),
275	  __imm_addr(map_spin_lock)
276	: __clobber_all);
277}
278
279char _license[] SEC("license") = "GPL";