Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.13.7.
  1{
  2	"helper access to packet: test1, valid packet_ptr range",
  3	.insns = {
  4	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
  5	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
  6		    offsetof(struct xdp_md, data_end)),
  7	BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
  8	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
  9	BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 5),
 10	BPF_LD_MAP_FD(BPF_REG_1, 0),
 11	BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
 12	BPF_MOV64_IMM(BPF_REG_4, 0),
 13	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_update_elem),
 14	BPF_MOV64_IMM(BPF_REG_0, 0),
 15	BPF_EXIT_INSN(),
 16	},
 17	.fixup_map_hash_8b = { 5 },
 18	.result_unpriv = ACCEPT,
 19	.result = ACCEPT,
 20	.prog_type = BPF_PROG_TYPE_XDP,
 21},
 22{
 23	"helper access to packet: test2, unchecked packet_ptr",
 24	.insns = {
 25	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
 26	BPF_LD_MAP_FD(BPF_REG_1, 0),
 27	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 28	BPF_MOV64_IMM(BPF_REG_0, 0),
 29	BPF_EXIT_INSN(),
 30	},
 31	.fixup_map_hash_8b = { 1 },
 32	.result = REJECT,
 33	.errstr = "invalid access to packet",
 34	.prog_type = BPF_PROG_TYPE_XDP,
 35},
 36{
 37	"helper access to packet: test3, variable add",
 38	.insns = {
 39	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
 40	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
 41			offsetof(struct xdp_md, data_end)),
 42	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
 43	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8),
 44	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 10),
 45	BPF_LDX_MEM(BPF_B, BPF_REG_5, BPF_REG_2, 0),
 46	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
 47	BPF_ALU64_REG(BPF_ADD, BPF_REG_4, BPF_REG_5),
 48	BPF_MOV64_REG(BPF_REG_5, BPF_REG_4),
 49	BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 8),
 50	BPF_JMP_REG(BPF_JGT, BPF_REG_5, BPF_REG_3, 4),
 51	BPF_LD_MAP_FD(BPF_REG_1, 0),
 52	BPF_MOV64_REG(BPF_REG_2, BPF_REG_4),
 53	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 54	BPF_MOV64_IMM(BPF_REG_0, 0),
 55	BPF_EXIT_INSN(),
 56	},
 57	.fixup_map_hash_8b = { 11 },
 58	.result = ACCEPT,
 59	.prog_type = BPF_PROG_TYPE_XDP,
 60},
 61{
 62	"helper access to packet: test4, packet_ptr with bad range",
 63	.insns = {
 64	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
 65	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
 66		    offsetof(struct xdp_md, data_end)),
 67	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
 68	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 4),
 69	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 2),
 70	BPF_MOV64_IMM(BPF_REG_0, 0),
 71	BPF_EXIT_INSN(),
 72	BPF_LD_MAP_FD(BPF_REG_1, 0),
 73	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 74	BPF_MOV64_IMM(BPF_REG_0, 0),
 75	BPF_EXIT_INSN(),
 76	},
 77	.fixup_map_hash_8b = { 7 },
 78	.result = REJECT,
 79	.errstr = "invalid access to packet",
 80	.prog_type = BPF_PROG_TYPE_XDP,
 81},
 82{
 83	"helper access to packet: test5, packet_ptr with too short range",
 84	.insns = {
 85	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, offsetof(struct xdp_md, data)),
 86	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
 87		    offsetof(struct xdp_md, data_end)),
 88	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, 1),
 89	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
 90	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 7),
 91	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 3),
 92	BPF_LD_MAP_FD(BPF_REG_1, 0),
 93	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
 94	BPF_MOV64_IMM(BPF_REG_0, 0),
 95	BPF_EXIT_INSN(),
 96	},
 97	.fixup_map_hash_8b = { 6 },
 98	.result = REJECT,
 99	.errstr = "invalid access to packet",
100	.prog_type = BPF_PROG_TYPE_XDP,
101},
102{
103	"helper access to packet: test6, cls valid packet_ptr range",
104	.insns = {
105	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
106		    offsetof(struct __sk_buff, data)),
107	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
108		    offsetof(struct __sk_buff, data_end)),
109	BPF_MOV64_REG(BPF_REG_1, BPF_REG_2),
110	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),
111	BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_3, 5),
112	BPF_LD_MAP_FD(BPF_REG_1, 0),
113	BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
114	BPF_MOV64_IMM(BPF_REG_4, 0),
115	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_update_elem),
116	BPF_MOV64_IMM(BPF_REG_0, 0),
117	BPF_EXIT_INSN(),
118	},
119	.fixup_map_hash_8b = { 5 },
120	.result = ACCEPT,
121	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
122},
123{
124	"helper access to packet: test7, cls unchecked packet_ptr",
125	.insns = {
126	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
127		    offsetof(struct __sk_buff, data)),
128	BPF_LD_MAP_FD(BPF_REG_1, 0),
129	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
130	BPF_MOV64_IMM(BPF_REG_0, 0),
131	BPF_EXIT_INSN(),
132	},
133	.fixup_map_hash_8b = { 1 },
134	.result = REJECT,
135	.errstr = "invalid access to packet",
136	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
137},
138{
139	"helper access to packet: test8, cls variable add",
140	.insns = {
141	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
142			offsetof(struct __sk_buff, data)),
143	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
144			offsetof(struct __sk_buff, data_end)),
145	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
146	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8),
147	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 10),
148	BPF_LDX_MEM(BPF_B, BPF_REG_5, BPF_REG_2, 0),
149	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
150	BPF_ALU64_REG(BPF_ADD, BPF_REG_4, BPF_REG_5),
151	BPF_MOV64_REG(BPF_REG_5, BPF_REG_4),
152	BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 8),
153	BPF_JMP_REG(BPF_JGT, BPF_REG_5, BPF_REG_3, 4),
154	BPF_LD_MAP_FD(BPF_REG_1, 0),
155	BPF_MOV64_REG(BPF_REG_2, BPF_REG_4),
156	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
157	BPF_MOV64_IMM(BPF_REG_0, 0),
158	BPF_EXIT_INSN(),
159	},
160	.fixup_map_hash_8b = { 11 },
161	.result = ACCEPT,
162	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
163},
164{
165	"helper access to packet: test9, cls packet_ptr with bad range",
166	.insns = {
167	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
168		    offsetof(struct __sk_buff, data)),
169	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
170		    offsetof(struct __sk_buff, data_end)),
171	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
172	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 4),
173	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 2),
174	BPF_MOV64_IMM(BPF_REG_0, 0),
175	BPF_EXIT_INSN(),
176	BPF_LD_MAP_FD(BPF_REG_1, 0),
177	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
178	BPF_MOV64_IMM(BPF_REG_0, 0),
179	BPF_EXIT_INSN(),
180	},
181	.fixup_map_hash_8b = { 7 },
182	.result = REJECT,
183	.errstr = "invalid access to packet",
184	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
185},
186{
187	"helper access to packet: test10, cls packet_ptr with too short range",
188	.insns = {
189	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
190		    offsetof(struct __sk_buff, data)),
191	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
192		    offsetof(struct __sk_buff, data_end)),
193	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, 1),
194	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
195	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 7),
196	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 3),
197	BPF_LD_MAP_FD(BPF_REG_1, 0),
198	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
199	BPF_MOV64_IMM(BPF_REG_0, 0),
200	BPF_EXIT_INSN(),
201	},
202	.fixup_map_hash_8b = { 6 },
203	.result = REJECT,
204	.errstr = "invalid access to packet",
205	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
206},
207{
208	"helper access to packet: test11, cls unsuitable helper 1",
209	.insns = {
210	BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
211		    offsetof(struct __sk_buff, data)),
212	BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
213		    offsetof(struct __sk_buff, data_end)),
214	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
215	BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
216	BPF_ALU64_IMM(BPF_ADD, BPF_REG_3, 7),
217	BPF_JMP_REG(BPF_JGT, BPF_REG_3, BPF_REG_7, 4),
218	BPF_MOV64_IMM(BPF_REG_2, 0),
219	BPF_MOV64_IMM(BPF_REG_4, 42),
220	BPF_MOV64_IMM(BPF_REG_5, 0),
221	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_store_bytes),
222	BPF_MOV64_IMM(BPF_REG_0, 0),
223	BPF_EXIT_INSN(),
224	},
225	.result = REJECT,
226	.errstr = "helper access to the packet",
227	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
228},
229{
230	"helper access to packet: test12, cls unsuitable helper 2",
231	.insns = {
232	BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
233		    offsetof(struct __sk_buff, data)),
234	BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
235		    offsetof(struct __sk_buff, data_end)),
236	BPF_MOV64_REG(BPF_REG_3, BPF_REG_6),
237	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 8),
238	BPF_JMP_REG(BPF_JGT, BPF_REG_6, BPF_REG_7, 3),
239	BPF_MOV64_IMM(BPF_REG_2, 0),
240	BPF_MOV64_IMM(BPF_REG_4, 4),
241	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_skb_load_bytes),
242	BPF_MOV64_IMM(BPF_REG_0, 0),
243	BPF_EXIT_INSN(),
244	},
245	.result = REJECT,
246	.errstr = "helper access to the packet",
247	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
248},
249{
250	"helper access to packet: test13, cls helper ok",
251	.insns = {
252	BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
253		    offsetof(struct __sk_buff, data)),
254	BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
255		    offsetof(struct __sk_buff, data_end)),
256	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
257	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
258	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
259	BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
260	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
261	BPF_MOV64_IMM(BPF_REG_2, 4),
262	BPF_MOV64_IMM(BPF_REG_3, 0),
263	BPF_MOV64_IMM(BPF_REG_4, 0),
264	BPF_MOV64_IMM(BPF_REG_5, 0),
265	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
266	BPF_MOV64_IMM(BPF_REG_0, 0),
267	BPF_EXIT_INSN(),
268	},
269	.result = ACCEPT,
270	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
271},
272{
273	"helper access to packet: test14, cls helper ok sub",
274	.insns = {
275	BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
276		    offsetof(struct __sk_buff, data)),
277	BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
278		    offsetof(struct __sk_buff, data_end)),
279	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
280	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
281	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
282	BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
283	BPF_ALU64_IMM(BPF_SUB, BPF_REG_1, 4),
284	BPF_MOV64_IMM(BPF_REG_2, 4),
285	BPF_MOV64_IMM(BPF_REG_3, 0),
286	BPF_MOV64_IMM(BPF_REG_4, 0),
287	BPF_MOV64_IMM(BPF_REG_5, 0),
288	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
289	BPF_MOV64_IMM(BPF_REG_0, 0),
290	BPF_EXIT_INSN(),
291	},
292	.result = ACCEPT,
293	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
294},
295{
296	"helper access to packet: test15, cls helper fail sub",
297	.insns = {
298	BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
299		    offsetof(struct __sk_buff, data)),
300	BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
301		    offsetof(struct __sk_buff, data_end)),
302	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
303	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
304	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
305	BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
306	BPF_ALU64_IMM(BPF_SUB, BPF_REG_1, 12),
307	BPF_MOV64_IMM(BPF_REG_2, 4),
308	BPF_MOV64_IMM(BPF_REG_3, 0),
309	BPF_MOV64_IMM(BPF_REG_4, 0),
310	BPF_MOV64_IMM(BPF_REG_5, 0),
311	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
312	BPF_MOV64_IMM(BPF_REG_0, 0),
313	BPF_EXIT_INSN(),
314	},
315	.result = REJECT,
316	.errstr = "invalid access to packet",
317	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
318},
319{
320	"helper access to packet: test16, cls helper fail range 1",
321	.insns = {
322	BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
323		    offsetof(struct __sk_buff, data)),
324	BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
325		    offsetof(struct __sk_buff, data_end)),
326	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
327	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
328	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
329	BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
330	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
331	BPF_MOV64_IMM(BPF_REG_2, 8),
332	BPF_MOV64_IMM(BPF_REG_3, 0),
333	BPF_MOV64_IMM(BPF_REG_4, 0),
334	BPF_MOV64_IMM(BPF_REG_5, 0),
335	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
336	BPF_MOV64_IMM(BPF_REG_0, 0),
337	BPF_EXIT_INSN(),
338	},
339	.result = REJECT,
340	.errstr = "invalid access to packet",
341	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
342},
343{
344	"helper access to packet: test17, cls helper fail range 2",
345	.insns = {
346	BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
347		    offsetof(struct __sk_buff, data)),
348	BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
349		    offsetof(struct __sk_buff, data_end)),
350	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
351	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
352	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
353	BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
354	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
355	BPF_MOV64_IMM(BPF_REG_2, -9),
356	BPF_MOV64_IMM(BPF_REG_3, 0),
357	BPF_MOV64_IMM(BPF_REG_4, 0),
358	BPF_MOV64_IMM(BPF_REG_5, 0),
359	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
360	BPF_MOV64_IMM(BPF_REG_0, 0),
361	BPF_EXIT_INSN(),
362	},
363	.result = REJECT,
364	.errstr = "R2 min value is negative",
365	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
366},
367{
368	"helper access to packet: test18, cls helper fail range 3",
369	.insns = {
370	BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
371		    offsetof(struct __sk_buff, data)),
372	BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
373		    offsetof(struct __sk_buff, data_end)),
374	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
375	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
376	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
377	BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
378	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
379	BPF_MOV64_IMM(BPF_REG_2, ~0),
380	BPF_MOV64_IMM(BPF_REG_3, 0),
381	BPF_MOV64_IMM(BPF_REG_4, 0),
382	BPF_MOV64_IMM(BPF_REG_5, 0),
383	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
384	BPF_MOV64_IMM(BPF_REG_0, 0),
385	BPF_EXIT_INSN(),
386	},
387	.result = REJECT,
388	.errstr = "R2 min value is negative",
389	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
390},
391{
392	"helper access to packet: test19, cls helper range zero",
393	.insns = {
394	BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
395		    offsetof(struct __sk_buff, data)),
396	BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
397		    offsetof(struct __sk_buff, data_end)),
398	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
399	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
400	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
401	BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
402	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
403	BPF_MOV64_IMM(BPF_REG_2, 0),
404	BPF_MOV64_IMM(BPF_REG_3, 0),
405	BPF_MOV64_IMM(BPF_REG_4, 0),
406	BPF_MOV64_IMM(BPF_REG_5, 0),
407	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
408	BPF_MOV64_IMM(BPF_REG_0, 0),
409	BPF_EXIT_INSN(),
410	},
411	.result = ACCEPT,
412	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
413},
414{
415	"helper access to packet: test20, pkt end as input",
416	.insns = {
417	BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
418		    offsetof(struct __sk_buff, data)),
419	BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
420		    offsetof(struct __sk_buff, data_end)),
421	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
422	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
423	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
424	BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
425	BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),
426	BPF_MOV64_IMM(BPF_REG_2, 4),
427	BPF_MOV64_IMM(BPF_REG_3, 0),
428	BPF_MOV64_IMM(BPF_REG_4, 0),
429	BPF_MOV64_IMM(BPF_REG_5, 0),
430	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
431	BPF_MOV64_IMM(BPF_REG_0, 0),
432	BPF_EXIT_INSN(),
433	},
434	.result = REJECT,
435	.errstr = "R1 type=pkt_end expected=fp",
436	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
437},
438{
439	"helper access to packet: test21, wrong reg",
440	.insns = {
441	BPF_LDX_MEM(BPF_W, BPF_REG_6, BPF_REG_1,
442		    offsetof(struct __sk_buff, data)),
443	BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
444		    offsetof(struct __sk_buff, data_end)),
445	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 1),
446	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
447	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 7),
448	BPF_JMP_REG(BPF_JGT, BPF_REG_1, BPF_REG_7, 6),
449	BPF_MOV64_IMM(BPF_REG_2, 4),
450	BPF_MOV64_IMM(BPF_REG_3, 0),
451	BPF_MOV64_IMM(BPF_REG_4, 0),
452	BPF_MOV64_IMM(BPF_REG_5, 0),
453	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_csum_diff),
454	BPF_MOV64_IMM(BPF_REG_0, 0),
455	BPF_EXIT_INSN(),
456	},
457	.result = REJECT,
458	.errstr = "invalid access to packet",
459	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
460},