Loading...
Note: File does not exist in v3.1.
1{
2 "jset32: BPF_K",
3 .insns = {
4 BPF_DIRECT_PKT_R2,
5 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
6 /* reg, high bits shouldn't be tested */
7 BPF_JMP32_IMM(BPF_JSET, BPF_REG_7, -2, 1),
8 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
9 BPF_EXIT_INSN(),
10
11 BPF_JMP32_IMM(BPF_JSET, BPF_REG_7, 1, 1),
12 BPF_EXIT_INSN(),
13 BPF_MOV64_IMM(BPF_REG_0, 2),
14 BPF_EXIT_INSN(),
15 },
16 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
17 .result = ACCEPT,
18 .runs = 3,
19 .retvals = {
20 { .retval = 0,
21 .data64 = { 1ULL << 63, }
22 },
23 { .retval = 2,
24 .data64 = { 1, }
25 },
26 { .retval = 2,
27 .data64 = { 1ULL << 63 | 1, }
28 },
29 },
30 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
31},
32{
33 "jset32: BPF_X",
34 .insns = {
35 BPF_DIRECT_PKT_R2,
36 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
37 BPF_LD_IMM64(BPF_REG_8, 0x8000000000000000),
38 BPF_JMP32_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
39 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
40 BPF_EXIT_INSN(),
41
42 BPF_LD_IMM64(BPF_REG_8, 0x8000000000000001),
43 BPF_JMP32_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
44 BPF_EXIT_INSN(),
45 BPF_MOV64_IMM(BPF_REG_0, 2),
46 BPF_EXIT_INSN(),
47 },
48 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
49 .result = ACCEPT,
50 .runs = 3,
51 .retvals = {
52 { .retval = 0,
53 .data64 = { 1ULL << 63, }
54 },
55 { .retval = 2,
56 .data64 = { 1, }
57 },
58 { .retval = 2,
59 .data64 = { 1ULL << 63 | 1, }
60 },
61 },
62 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
63},
64{
65 "jset32: ignores upper bits",
66 .insns = {
67 BPF_MOV64_IMM(BPF_REG_0, 0),
68 BPF_LD_IMM64(BPF_REG_7, 0x8000000000000000),
69 BPF_LD_IMM64(BPF_REG_8, 0x8000000000000000),
70 BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
71 BPF_EXIT_INSN(),
72 BPF_JMP32_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
73 BPF_MOV64_IMM(BPF_REG_0, 2),
74 BPF_EXIT_INSN(),
75 },
76 .result = ACCEPT,
77 .retval = 2,
78},
79{
80 "jset32: min/max deduction",
81 .insns = {
82 BPF_RAND_UEXT_R7,
83 BPF_MOV64_IMM(BPF_REG_0, 0),
84 BPF_JMP32_IMM(BPF_JSET, BPF_REG_7, 0x10, 1),
85 BPF_EXIT_INSN(),
86 BPF_JMP32_IMM(BPF_JGE, BPF_REG_7, 0x10, 1),
87 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
88 BPF_EXIT_INSN(),
89 },
90 .errstr_unpriv = "R9 !read_ok",
91 .result_unpriv = REJECT,
92 .result = ACCEPT,
93},
94{
95 "jeq32: BPF_K",
96 .insns = {
97 BPF_DIRECT_PKT_R2,
98 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
99 BPF_JMP32_IMM(BPF_JEQ, BPF_REG_7, -1, 1),
100 BPF_EXIT_INSN(),
101 BPF_MOV64_IMM(BPF_REG_0, 2),
102 BPF_EXIT_INSN(),
103 },
104 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
105 .result = ACCEPT,
106 .runs = 2,
107 .retvals = {
108 { .retval = 0,
109 .data64 = { -2, }
110 },
111 { .retval = 2,
112 .data64 = { -1, }
113 },
114 },
115 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
116},
117{
118 "jeq32: BPF_X",
119 .insns = {
120 BPF_DIRECT_PKT_R2,
121 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
122 BPF_LD_IMM64(BPF_REG_8, 0x7000000000000001),
123 BPF_JMP32_REG(BPF_JEQ, BPF_REG_7, BPF_REG_8, 1),
124 BPF_EXIT_INSN(),
125 BPF_MOV64_IMM(BPF_REG_0, 2),
126 BPF_EXIT_INSN(),
127 },
128 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
129 .result = ACCEPT,
130 .runs = 3,
131 .retvals = {
132 { .retval = 0,
133 .data64 = { 2, }
134 },
135 { .retval = 2,
136 .data64 = { 1, }
137 },
138 { .retval = 2,
139 .data64 = { 1ULL << 63 | 1, }
140 },
141 },
142 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
143},
144{
145 "jeq32: min/max deduction",
146 .insns = {
147 BPF_RAND_UEXT_R7,
148 BPF_MOV64_IMM(BPF_REG_0, 0),
149 BPF_JMP32_IMM(BPF_JEQ, BPF_REG_7, 0x10, 1),
150 BPF_EXIT_INSN(),
151 BPF_JMP32_IMM(BPF_JSGE, BPF_REG_7, 0xf, 1),
152 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
153 BPF_EXIT_INSN(),
154 },
155 .errstr_unpriv = "R9 !read_ok",
156 .result_unpriv = REJECT,
157 .result = ACCEPT,
158},
159{
160 "jne32: BPF_K",
161 .insns = {
162 BPF_DIRECT_PKT_R2,
163 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
164 BPF_JMP32_IMM(BPF_JNE, BPF_REG_7, -1, 1),
165 BPF_EXIT_INSN(),
166 BPF_MOV64_IMM(BPF_REG_0, 2),
167 BPF_EXIT_INSN(),
168 },
169 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
170 .result = ACCEPT,
171 .runs = 2,
172 .retvals = {
173 { .retval = 2,
174 .data64 = { 1, }
175 },
176 { .retval = 0,
177 .data64 = { -1, }
178 },
179 },
180 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
181},
182{
183 "jne32: BPF_X",
184 .insns = {
185 BPF_DIRECT_PKT_R2,
186 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
187 BPF_LD_IMM64(BPF_REG_8, 0x8000000000000001),
188 BPF_JMP32_REG(BPF_JNE, BPF_REG_7, BPF_REG_8, 1),
189 BPF_EXIT_INSN(),
190 BPF_MOV64_IMM(BPF_REG_0, 2),
191 BPF_EXIT_INSN(),
192 },
193 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
194 .result = ACCEPT,
195 .runs = 3,
196 .retvals = {
197 { .retval = 0,
198 .data64 = { 1, }
199 },
200 { .retval = 2,
201 .data64 = { 2, }
202 },
203 { .retval = 2,
204 .data64 = { 1ULL << 63 | 2, }
205 },
206 },
207 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
208},
209{
210 "jne32: min/max deduction",
211 .insns = {
212 BPF_RAND_UEXT_R7,
213 BPF_MOV64_IMM(BPF_REG_0, 0),
214 BPF_JMP32_IMM(BPF_JNE, BPF_REG_7, 0x10, 1),
215 BPF_JMP_IMM(BPF_JNE, BPF_REG_7, 0x10, 1),
216 BPF_EXIT_INSN(),
217 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
218 BPF_EXIT_INSN(),
219 },
220 .errstr_unpriv = "R9 !read_ok",
221 .result_unpriv = REJECT,
222 .result = ACCEPT,
223},
224{
225 "jge32: BPF_K",
226 .insns = {
227 BPF_DIRECT_PKT_R2,
228 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
229 BPF_JMP32_IMM(BPF_JGE, BPF_REG_7, UINT_MAX - 1, 1),
230 BPF_EXIT_INSN(),
231 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
232 BPF_EXIT_INSN(),
233 },
234 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
235 .result = ACCEPT,
236 .runs = 3,
237 .retvals = {
238 { .retval = 2,
239 .data64 = { UINT_MAX, }
240 },
241 { .retval = 2,
242 .data64 = { UINT_MAX - 1, }
243 },
244 { .retval = 0,
245 .data64 = { 0, }
246 },
247 },
248 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
249},
250{
251 "jge32: BPF_X",
252 .insns = {
253 BPF_DIRECT_PKT_R2,
254 BPF_LD_IMM64(BPF_REG_8, UINT_MAX | 1ULL << 32),
255 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
256 BPF_JMP32_REG(BPF_JGE, BPF_REG_7, BPF_REG_8, 1),
257 BPF_EXIT_INSN(),
258 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
259 BPF_EXIT_INSN(),
260 },
261 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
262 .result = ACCEPT,
263 .runs = 3,
264 .retvals = {
265 { .retval = 2,
266 .data64 = { UINT_MAX, }
267 },
268 { .retval = 0,
269 .data64 = { INT_MAX, }
270 },
271 { .retval = 0,
272 .data64 = { (UINT_MAX - 1) | 2ULL << 32, }
273 },
274 },
275 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
276},
277{
278 "jge32: min/max deduction",
279 .insns = {
280 BPF_RAND_UEXT_R7,
281 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
282 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
283 BPF_JMP32_REG(BPF_JGE, BPF_REG_7, BPF_REG_8, 1),
284 BPF_EXIT_INSN(),
285 BPF_JMP32_IMM(BPF_JGE, BPF_REG_7, 0x7ffffff0, 1),
286 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
287 BPF_EXIT_INSN(),
288 },
289 .errstr_unpriv = "R0 invalid mem access 'scalar'",
290 .result_unpriv = REJECT,
291 .result = ACCEPT,
292 .retval = 2,
293 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
294},
295{
296 "jgt32: BPF_K",
297 .insns = {
298 BPF_DIRECT_PKT_R2,
299 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
300 BPF_JMP32_IMM(BPF_JGT, BPF_REG_7, UINT_MAX - 1, 1),
301 BPF_EXIT_INSN(),
302 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
303 BPF_EXIT_INSN(),
304 },
305 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
306 .result = ACCEPT,
307 .runs = 3,
308 .retvals = {
309 { .retval = 2,
310 .data64 = { UINT_MAX, }
311 },
312 { .retval = 0,
313 .data64 = { UINT_MAX - 1, }
314 },
315 { .retval = 0,
316 .data64 = { 0, }
317 },
318 },
319 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
320},
321{
322 "jgt32: BPF_X",
323 .insns = {
324 BPF_DIRECT_PKT_R2,
325 BPF_LD_IMM64(BPF_REG_8, (UINT_MAX - 1) | 1ULL << 32),
326 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
327 BPF_JMP32_REG(BPF_JGT, BPF_REG_7, BPF_REG_8, 1),
328 BPF_EXIT_INSN(),
329 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
330 BPF_EXIT_INSN(),
331 },
332 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
333 .result = ACCEPT,
334 .runs = 3,
335 .retvals = {
336 { .retval = 2,
337 .data64 = { UINT_MAX, }
338 },
339 { .retval = 0,
340 .data64 = { UINT_MAX - 1, }
341 },
342 { .retval = 0,
343 .data64 = { (UINT_MAX - 1) | 2ULL << 32, }
344 },
345 },
346 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
347},
348{
349 "jgt32: min/max deduction",
350 .insns = {
351 BPF_RAND_UEXT_R7,
352 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
353 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
354 BPF_JMP32_REG(BPF_JGT, BPF_REG_7, BPF_REG_8, 1),
355 BPF_EXIT_INSN(),
356 BPF_JMP_IMM(BPF_JGT, BPF_REG_7, 0x7ffffff0, 1),
357 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
358 BPF_EXIT_INSN(),
359 },
360 .errstr_unpriv = "R0 invalid mem access 'scalar'",
361 .result_unpriv = REJECT,
362 .result = ACCEPT,
363 .retval = 2,
364 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
365},
366{
367 "jle32: BPF_K",
368 .insns = {
369 BPF_DIRECT_PKT_R2,
370 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
371 BPF_JMP32_IMM(BPF_JLE, BPF_REG_7, INT_MAX, 1),
372 BPF_EXIT_INSN(),
373 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
374 BPF_EXIT_INSN(),
375 },
376 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
377 .result = ACCEPT,
378 .runs = 3,
379 .retvals = {
380 { .retval = 2,
381 .data64 = { INT_MAX - 1, }
382 },
383 { .retval = 0,
384 .data64 = { UINT_MAX, }
385 },
386 { .retval = 2,
387 .data64 = { INT_MAX, }
388 },
389 },
390 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
391},
392{
393 "jle32: BPF_X",
394 .insns = {
395 BPF_DIRECT_PKT_R2,
396 BPF_LD_IMM64(BPF_REG_8, (INT_MAX - 1) | 2ULL << 32),
397 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
398 BPF_JMP32_REG(BPF_JLE, BPF_REG_7, BPF_REG_8, 1),
399 BPF_EXIT_INSN(),
400 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
401 BPF_EXIT_INSN(),
402 },
403 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
404 .result = ACCEPT,
405 .runs = 3,
406 .retvals = {
407 { .retval = 0,
408 .data64 = { INT_MAX | 1ULL << 32, }
409 },
410 { .retval = 2,
411 .data64 = { INT_MAX - 2, }
412 },
413 { .retval = 0,
414 .data64 = { UINT_MAX, }
415 },
416 },
417 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
418},
419{
420 "jle32: min/max deduction",
421 .insns = {
422 BPF_RAND_UEXT_R7,
423 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
424 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
425 BPF_JMP32_REG(BPF_JLE, BPF_REG_7, BPF_REG_8, 1),
426 BPF_EXIT_INSN(),
427 BPF_JMP32_IMM(BPF_JLE, BPF_REG_7, 0x7ffffff0, 1),
428 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
429 BPF_EXIT_INSN(),
430 },
431 .errstr_unpriv = "R0 invalid mem access 'scalar'",
432 .result_unpriv = REJECT,
433 .result = ACCEPT,
434 .retval = 2,
435 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
436},
437{
438 "jlt32: BPF_K",
439 .insns = {
440 BPF_DIRECT_PKT_R2,
441 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
442 BPF_JMP32_IMM(BPF_JLT, BPF_REG_7, INT_MAX, 1),
443 BPF_EXIT_INSN(),
444 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
445 BPF_EXIT_INSN(),
446 },
447 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
448 .result = ACCEPT,
449 .runs = 3,
450 .retvals = {
451 { .retval = 0,
452 .data64 = { INT_MAX, }
453 },
454 { .retval = 0,
455 .data64 = { UINT_MAX, }
456 },
457 { .retval = 2,
458 .data64 = { INT_MAX - 1, }
459 },
460 },
461 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
462},
463{
464 "jlt32: BPF_X",
465 .insns = {
466 BPF_DIRECT_PKT_R2,
467 BPF_LD_IMM64(BPF_REG_8, INT_MAX | 2ULL << 32),
468 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
469 BPF_JMP32_REG(BPF_JLT, BPF_REG_7, BPF_REG_8, 1),
470 BPF_EXIT_INSN(),
471 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
472 BPF_EXIT_INSN(),
473 },
474 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
475 .result = ACCEPT,
476 .runs = 3,
477 .retvals = {
478 { .retval = 0,
479 .data64 = { INT_MAX | 1ULL << 32, }
480 },
481 { .retval = 0,
482 .data64 = { UINT_MAX, }
483 },
484 { .retval = 2,
485 .data64 = { (INT_MAX - 1) | 3ULL << 32, }
486 },
487 },
488 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
489},
490{
491 "jlt32: min/max deduction",
492 .insns = {
493 BPF_RAND_UEXT_R7,
494 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
495 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
496 BPF_JMP32_REG(BPF_JLT, BPF_REG_7, BPF_REG_8, 1),
497 BPF_EXIT_INSN(),
498 BPF_JMP_IMM(BPF_JSLT, BPF_REG_7, 0x7ffffff0, 1),
499 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
500 BPF_EXIT_INSN(),
501 },
502 .errstr_unpriv = "R0 invalid mem access 'scalar'",
503 .result_unpriv = REJECT,
504 .result = ACCEPT,
505 .retval = 2,
506 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
507},
508{
509 "jsge32: BPF_K",
510 .insns = {
511 BPF_DIRECT_PKT_R2,
512 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
513 BPF_JMP32_IMM(BPF_JSGE, BPF_REG_7, -1, 1),
514 BPF_EXIT_INSN(),
515 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
516 BPF_EXIT_INSN(),
517 },
518 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
519 .result = ACCEPT,
520 .runs = 3,
521 .retvals = {
522 { .retval = 2,
523 .data64 = { 0, }
524 },
525 { .retval = 2,
526 .data64 = { -1, }
527 },
528 { .retval = 0,
529 .data64 = { -2, }
530 },
531 },
532 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
533},
534{
535 "jsge32: BPF_X",
536 .insns = {
537 BPF_DIRECT_PKT_R2,
538 BPF_LD_IMM64(BPF_REG_8, (__u32)-1 | 2ULL << 32),
539 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
540 BPF_JMP32_REG(BPF_JSGE, BPF_REG_7, BPF_REG_8, 1),
541 BPF_EXIT_INSN(),
542 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
543 BPF_EXIT_INSN(),
544 },
545 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
546 .result = ACCEPT,
547 .runs = 3,
548 .retvals = {
549 { .retval = 2,
550 .data64 = { -1, }
551 },
552 { .retval = 2,
553 .data64 = { 0x7fffffff | 1ULL << 32, }
554 },
555 { .retval = 0,
556 .data64 = { -2, }
557 },
558 },
559 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
560},
561{
562 "jsge32: min/max deduction",
563 .insns = {
564 BPF_RAND_UEXT_R7,
565 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
566 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
567 BPF_JMP32_REG(BPF_JSGE, BPF_REG_7, BPF_REG_8, 1),
568 BPF_EXIT_INSN(),
569 BPF_JMP_IMM(BPF_JSGE, BPF_REG_7, 0x7ffffff0, 1),
570 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
571 BPF_EXIT_INSN(),
572 },
573 .errstr_unpriv = "R0 invalid mem access 'scalar'",
574 .result_unpriv = REJECT,
575 .result = ACCEPT,
576 .retval = 2,
577 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
578},
579{
580 "jsgt32: BPF_K",
581 .insns = {
582 BPF_DIRECT_PKT_R2,
583 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
584 BPF_JMP32_IMM(BPF_JSGT, BPF_REG_7, -1, 1),
585 BPF_EXIT_INSN(),
586 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
587 BPF_EXIT_INSN(),
588 },
589 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
590 .result = ACCEPT,
591 .runs = 3,
592 .retvals = {
593 { .retval = 0,
594 .data64 = { (__u32)-2, }
595 },
596 { .retval = 0,
597 .data64 = { -1, }
598 },
599 { .retval = 2,
600 .data64 = { 1, }
601 },
602 },
603 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
604},
605{
606 "jsgt32: BPF_X",
607 .insns = {
608 BPF_DIRECT_PKT_R2,
609 BPF_LD_IMM64(BPF_REG_8, 0x7ffffffe | 1ULL << 32),
610 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
611 BPF_JMP32_REG(BPF_JSGT, BPF_REG_7, BPF_REG_8, 1),
612 BPF_EXIT_INSN(),
613 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
614 BPF_EXIT_INSN(),
615 },
616 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
617 .result = ACCEPT,
618 .runs = 3,
619 .retvals = {
620 { .retval = 0,
621 .data64 = { 0x7ffffffe, }
622 },
623 { .retval = 0,
624 .data64 = { 0x1ffffffffULL, }
625 },
626 { .retval = 2,
627 .data64 = { 0x7fffffff, }
628 },
629 },
630 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
631},
632{
633 "jsgt32: min/max deduction",
634 .insns = {
635 BPF_RAND_SEXT_R7,
636 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
637 BPF_LD_IMM64(BPF_REG_8, (__u32)(-2) | 1ULL << 32),
638 BPF_JMP32_REG(BPF_JSGT, BPF_REG_7, BPF_REG_8, 1),
639 BPF_EXIT_INSN(),
640 BPF_JMP_IMM(BPF_JSGT, BPF_REG_7, -2, 1),
641 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
642 BPF_EXIT_INSN(),
643 },
644 .errstr_unpriv = "R0 invalid mem access 'scalar'",
645 .result_unpriv = REJECT,
646 .result = ACCEPT,
647 .retval = 2,
648 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
649},
650{
651 "jsle32: BPF_K",
652 .insns = {
653 BPF_DIRECT_PKT_R2,
654 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
655 BPF_JMP32_IMM(BPF_JSLE, BPF_REG_7, -1, 1),
656 BPF_EXIT_INSN(),
657 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
658 BPF_EXIT_INSN(),
659 },
660 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
661 .result = ACCEPT,
662 .runs = 3,
663 .retvals = {
664 { .retval = 2,
665 .data64 = { (__u32)-2, }
666 },
667 { .retval = 2,
668 .data64 = { -1, }
669 },
670 { .retval = 0,
671 .data64 = { 1, }
672 },
673 },
674 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
675},
676{
677 "jsle32: BPF_X",
678 .insns = {
679 BPF_DIRECT_PKT_R2,
680 BPF_LD_IMM64(BPF_REG_8, 0x7ffffffe | 1ULL << 32),
681 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
682 BPF_JMP32_REG(BPF_JSLE, BPF_REG_7, BPF_REG_8, 1),
683 BPF_EXIT_INSN(),
684 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
685 BPF_EXIT_INSN(),
686 },
687 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
688 .result = ACCEPT,
689 .runs = 3,
690 .retvals = {
691 { .retval = 2,
692 .data64 = { 0x7ffffffe, }
693 },
694 { .retval = 2,
695 .data64 = { (__u32)-1, }
696 },
697 { .retval = 0,
698 .data64 = { 0x7fffffff | 2ULL << 32, }
699 },
700 },
701 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
702},
703{
704 "jsle32: min/max deduction",
705 .insns = {
706 BPF_RAND_UEXT_R7,
707 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
708 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
709 BPF_JMP32_REG(BPF_JSLE, BPF_REG_7, BPF_REG_8, 1),
710 BPF_EXIT_INSN(),
711 BPF_JMP_IMM(BPF_JSLE, BPF_REG_7, 0x7ffffff0, 1),
712 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
713 BPF_EXIT_INSN(),
714 },
715 .errstr_unpriv = "R0 invalid mem access 'scalar'",
716 .result_unpriv = REJECT,
717 .result = ACCEPT,
718 .retval = 2,
719 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
720},
721{
722 "jslt32: BPF_K",
723 .insns = {
724 BPF_DIRECT_PKT_R2,
725 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
726 BPF_JMP32_IMM(BPF_JSLT, BPF_REG_7, -1, 1),
727 BPF_EXIT_INSN(),
728 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
729 BPF_EXIT_INSN(),
730 },
731 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
732 .result = ACCEPT,
733 .runs = 3,
734 .retvals = {
735 { .retval = 2,
736 .data64 = { (__u32)-2, }
737 },
738 { .retval = 0,
739 .data64 = { -1, }
740 },
741 { .retval = 0,
742 .data64 = { 1, }
743 },
744 },
745 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
746},
747{
748 "jslt32: BPF_X",
749 .insns = {
750 BPF_DIRECT_PKT_R2,
751 BPF_LD_IMM64(BPF_REG_8, 0x7fffffff | 1ULL << 32),
752 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
753 BPF_JMP32_REG(BPF_JSLT, BPF_REG_7, BPF_REG_8, 1),
754 BPF_EXIT_INSN(),
755 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
756 BPF_EXIT_INSN(),
757 },
758 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
759 .result = ACCEPT,
760 .runs = 3,
761 .retvals = {
762 { .retval = 2,
763 .data64 = { 0x7ffffffe, }
764 },
765 { .retval = 2,
766 .data64 = { 0xffffffff, }
767 },
768 { .retval = 0,
769 .data64 = { 0x7fffffff | 2ULL << 32, }
770 },
771 },
772 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
773},
774{
775 "jslt32: min/max deduction",
776 .insns = {
777 BPF_RAND_SEXT_R7,
778 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
779 BPF_LD_IMM64(BPF_REG_8, (__u32)(-1) | 1ULL << 32),
780 BPF_JMP32_REG(BPF_JSLT, BPF_REG_7, BPF_REG_8, 1),
781 BPF_EXIT_INSN(),
782 BPF_JMP32_IMM(BPF_JSLT, BPF_REG_7, -1, 1),
783 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
784 BPF_EXIT_INSN(),
785 },
786 .errstr_unpriv = "R0 invalid mem access 'scalar'",
787 .result_unpriv = REJECT,
788 .result = ACCEPT,
789 .retval = 2,
790 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
791},
792{
793 "jgt32: range bound deduction, reg op imm",
794 .insns = {
795 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
796 BPF_MOV64_REG(BPF_REG_8, BPF_REG_1),
797 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
798 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
799 BPF_LD_MAP_FD(BPF_REG_1, 0),
800 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
801 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9),
802 BPF_MOV64_REG(BPF_REG_1, BPF_REG_8),
803 BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
804 BPF_EMIT_CALL(BPF_FUNC_get_cgroup_classid),
805 BPF_JMP32_IMM(BPF_JGT, BPF_REG_0, 1, 5),
806 BPF_MOV32_REG(BPF_REG_6, BPF_REG_0),
807 BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),
808 BPF_ALU64_IMM(BPF_RSH, BPF_REG_6, 32),
809 BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_6),
810 BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),
811 BPF_MOV32_IMM(BPF_REG_0, 0),
812 BPF_EXIT_INSN(),
813 },
814 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
815 .fixup_map_hash_48b = { 4 },
816 .result = ACCEPT,
817 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
818},
819{
820 "jgt32: range bound deduction, reg1 op reg2, reg1 unknown",
821 .insns = {
822 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
823 BPF_MOV64_REG(BPF_REG_8, BPF_REG_1),
824 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
825 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
826 BPF_LD_MAP_FD(BPF_REG_1, 0),
827 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
828 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 10),
829 BPF_MOV64_REG(BPF_REG_1, BPF_REG_8),
830 BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
831 BPF_EMIT_CALL(BPF_FUNC_get_cgroup_classid),
832 BPF_MOV32_IMM(BPF_REG_2, 1),
833 BPF_JMP32_REG(BPF_JGT, BPF_REG_0, BPF_REG_2, 5),
834 BPF_MOV32_REG(BPF_REG_6, BPF_REG_0),
835 BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),
836 BPF_ALU64_IMM(BPF_RSH, BPF_REG_6, 32),
837 BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_6),
838 BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),
839 BPF_MOV32_IMM(BPF_REG_0, 0),
840 BPF_EXIT_INSN(),
841 },
842 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
843 .fixup_map_hash_48b = { 4 },
844 .result = ACCEPT,
845 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
846},
847{
848 "jle32: range bound deduction, reg1 op reg2, reg2 unknown",
849 .insns = {
850 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
851 BPF_MOV64_REG(BPF_REG_8, BPF_REG_1),
852 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
853 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
854 BPF_LD_MAP_FD(BPF_REG_1, 0),
855 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
856 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 10),
857 BPF_MOV64_REG(BPF_REG_1, BPF_REG_8),
858 BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
859 BPF_EMIT_CALL(BPF_FUNC_get_cgroup_classid),
860 BPF_MOV32_IMM(BPF_REG_2, 1),
861 BPF_JMP32_REG(BPF_JLE, BPF_REG_2, BPF_REG_0, 5),
862 BPF_MOV32_REG(BPF_REG_6, BPF_REG_0),
863 BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),
864 BPF_ALU64_IMM(BPF_RSH, BPF_REG_6, 32),
865 BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_6),
866 BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),
867 BPF_MOV32_IMM(BPF_REG_0, 0),
868 BPF_EXIT_INSN(),
869 },
870 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
871 .fixup_map_hash_48b = { 4 },
872 .result = ACCEPT,
873 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
874},
875{
876 "jeq32/jne32: bounds checking",
877 .insns = {
878 BPF_MOV64_IMM(BPF_REG_6, 563),
879 BPF_MOV64_IMM(BPF_REG_2, 0),
880 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
881 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
882 BPF_ALU32_REG(BPF_OR, BPF_REG_2, BPF_REG_6),
883 BPF_JMP32_IMM(BPF_JNE, BPF_REG_2, 8, 5),
884 BPF_JMP_IMM(BPF_JSGE, BPF_REG_2, 500, 2),
885 BPF_MOV64_IMM(BPF_REG_0, 2),
886 BPF_EXIT_INSN(),
887 BPF_MOV64_REG(BPF_REG_0, BPF_REG_4),
888 BPF_EXIT_INSN(),
889 BPF_MOV64_IMM(BPF_REG_0, 1),
890 BPF_EXIT_INSN(),
891 },
892 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
893 .result = ACCEPT,
894 .retval = 1,
895},