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),
11 BPF_JMP32_IMM(BPF_JSET, BPF_REG_7, 1, 1),
13 BPF_MOV64_IMM(BPF_REG_0, 2),
16 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
21 .data64 = { 1ULL << 63, }
27 .data64 = { 1ULL << 63 | 1, }
30 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
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),
42 BPF_LD_IMM64(BPF_REG_8, 0x8000000000000001),
43 BPF_JMP32_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
45 BPF_MOV64_IMM(BPF_REG_0, 2),
48 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
53 .data64 = { 1ULL << 63, }
59 .data64 = { 1ULL << 63 | 1, }
62 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
65 "jset32: ignores upper bits",
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),
72 BPF_JMP32_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
73 BPF_MOV64_IMM(BPF_REG_0, 2),
80 "jset32: min/max deduction",
83 BPF_MOV64_IMM(BPF_REG_0, 0),
84 BPF_JMP32_IMM(BPF_JSET, BPF_REG_7, 0x10, 1),
86 BPF_JMP32_IMM(BPF_JGE, BPF_REG_7, 0x10, 1),
87 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
90 .errstr_unpriv = "R9 !read_ok",
91 .result_unpriv = REJECT,
98 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
99 BPF_JMP32_IMM(BPF_JEQ, BPF_REG_7, -1, 1),
101 BPF_MOV64_IMM(BPF_REG_0, 2),
104 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
115 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
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),
125 BPF_MOV64_IMM(BPF_REG_0, 2),
128 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
139 .data64 = { 1ULL << 63 | 1, }
142 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
145 "jeq32: min/max deduction",
148 BPF_MOV64_IMM(BPF_REG_0, 0),
149 BPF_JMP32_IMM(BPF_JEQ, BPF_REG_7, 0x10, 1),
151 BPF_JMP32_IMM(BPF_JSGE, BPF_REG_7, 0xf, 1),
152 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
155 .errstr_unpriv = "R9 !read_ok",
156 .result_unpriv = REJECT,
163 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
164 BPF_JMP32_IMM(BPF_JNE, BPF_REG_7, -1, 1),
166 BPF_MOV64_IMM(BPF_REG_0, 2),
169 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
180 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
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),
190 BPF_MOV64_IMM(BPF_REG_0, 2),
193 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
204 .data64 = { 1ULL << 63 | 2, }
207 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
210 "jne32: min/max deduction",
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),
217 BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
220 .errstr_unpriv = "R9 !read_ok",
221 .result_unpriv = REJECT,
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),
231 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
234 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
239 .data64 = { UINT_MAX, }
242 .data64 = { UINT_MAX - 1, }
248 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
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),
258 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
261 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
266 .data64 = { UINT_MAX, }
269 .data64 = { INT_MAX, }
272 .data64 = { (UINT_MAX - 1) | 2ULL << 32, }
275 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
278 "jge32: min/max deduction",
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),
285 BPF_JMP32_IMM(BPF_JGE, BPF_REG_7, 0x7ffffff0, 1),
286 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
289 .errstr_unpriv = "R0 invalid mem access 'scalar'",
290 .result_unpriv = REJECT,
298 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
299 BPF_JMP32_IMM(BPF_JGT, BPF_REG_7, UINT_MAX - 1, 1),
301 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
304 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
309 .data64 = { UINT_MAX, }
312 .data64 = { UINT_MAX - 1, }
318 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
324 BPF_LD_IMM64(BPF_REG_8, (UINT_MAX - 1) | 1ULL << 32),
325 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
326 BPF_JMP32_REG(BPF_JGT, BPF_REG_7, BPF_REG_8, 1),
328 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
331 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
336 .data64 = { UINT_MAX, }
339 .data64 = { UINT_MAX - 1, }
342 .data64 = { (UINT_MAX - 1) | 2ULL << 32, }
345 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
348 "jgt32: min/max deduction",
351 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
352 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
353 BPF_JMP32_REG(BPF_JGT, BPF_REG_7, BPF_REG_8, 1),
355 BPF_JMP_IMM(BPF_JGT, BPF_REG_7, 0x7ffffff0, 1),
356 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
359 .errstr_unpriv = "R0 invalid mem access 'scalar'",
360 .result_unpriv = REJECT,
368 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
369 BPF_JMP32_IMM(BPF_JLE, BPF_REG_7, INT_MAX, 1),
371 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
374 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
379 .data64 = { INT_MAX - 1, }
382 .data64 = { UINT_MAX, }
385 .data64 = { INT_MAX, }
388 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
394 BPF_LD_IMM64(BPF_REG_8, (INT_MAX - 1) | 2ULL << 32),
395 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
396 BPF_JMP32_REG(BPF_JLE, BPF_REG_7, BPF_REG_8, 1),
398 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
401 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
406 .data64 = { INT_MAX | 1ULL << 32, }
409 .data64 = { INT_MAX - 2, }
412 .data64 = { UINT_MAX, }
415 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
418 "jle32: min/max deduction",
421 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
422 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
423 BPF_JMP32_REG(BPF_JLE, BPF_REG_7, BPF_REG_8, 1),
425 BPF_JMP32_IMM(BPF_JLE, BPF_REG_7, 0x7ffffff0, 1),
426 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
429 .errstr_unpriv = "R0 invalid mem access 'scalar'",
430 .result_unpriv = REJECT,
438 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
439 BPF_JMP32_IMM(BPF_JLT, BPF_REG_7, INT_MAX, 1),
441 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
444 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
449 .data64 = { INT_MAX, }
452 .data64 = { UINT_MAX, }
455 .data64 = { INT_MAX - 1, }
458 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
464 BPF_LD_IMM64(BPF_REG_8, INT_MAX | 2ULL << 32),
465 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
466 BPF_JMP32_REG(BPF_JLT, BPF_REG_7, BPF_REG_8, 1),
468 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
471 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
476 .data64 = { INT_MAX | 1ULL << 32, }
479 .data64 = { UINT_MAX, }
482 .data64 = { (INT_MAX - 1) | 3ULL << 32, }
485 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
488 "jlt32: min/max deduction",
491 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
492 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
493 BPF_JMP32_REG(BPF_JLT, BPF_REG_7, BPF_REG_8, 1),
495 BPF_JMP_IMM(BPF_JSLT, BPF_REG_7, 0x7ffffff0, 1),
496 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
499 .errstr_unpriv = "R0 invalid mem access 'scalar'",
500 .result_unpriv = REJECT,
508 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
509 BPF_JMP32_IMM(BPF_JSGE, BPF_REG_7, -1, 1),
511 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
514 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
528 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
534 BPF_LD_IMM64(BPF_REG_8, (__u32)-1 | 2ULL << 32),
535 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
536 BPF_JMP32_REG(BPF_JSGE, BPF_REG_7, BPF_REG_8, 1),
538 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
541 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
549 .data64 = { 0x7fffffff | 1ULL << 32, }
555 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
558 "jsge32: min/max deduction",
561 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
562 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
563 BPF_JMP32_REG(BPF_JSGE, BPF_REG_7, BPF_REG_8, 1),
565 BPF_JMP_IMM(BPF_JSGE, BPF_REG_7, 0x7ffffff0, 1),
566 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
569 .errstr_unpriv = "R0 invalid mem access 'scalar'",
570 .result_unpriv = REJECT,
578 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
579 BPF_JMP32_IMM(BPF_JSGT, BPF_REG_7, -1, 1),
581 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
584 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
589 .data64 = { (__u32)-2, }
598 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
604 BPF_LD_IMM64(BPF_REG_8, 0x7ffffffe | 1ULL << 32),
605 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
606 BPF_JMP32_REG(BPF_JSGT, BPF_REG_7, BPF_REG_8, 1),
608 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
611 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
616 .data64 = { 0x7ffffffe, }
619 .data64 = { 0x1ffffffffULL, }
622 .data64 = { 0x7fffffff, }
625 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
628 "jsgt32: min/max deduction",
631 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
632 BPF_LD_IMM64(BPF_REG_8, (__u32)(-2) | 1ULL << 32),
633 BPF_JMP32_REG(BPF_JSGT, BPF_REG_7, BPF_REG_8, 1),
635 BPF_JMP_IMM(BPF_JSGT, BPF_REG_7, -2, 1),
636 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
639 .errstr_unpriv = "R0 invalid mem access 'scalar'",
640 .result_unpriv = REJECT,
648 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
649 BPF_JMP32_IMM(BPF_JSLE, BPF_REG_7, -1, 1),
651 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
654 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
659 .data64 = { (__u32)-2, }
668 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
674 BPF_LD_IMM64(BPF_REG_8, 0x7ffffffe | 1ULL << 32),
675 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
676 BPF_JMP32_REG(BPF_JSLE, BPF_REG_7, BPF_REG_8, 1),
678 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
681 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
686 .data64 = { 0x7ffffffe, }
689 .data64 = { (__u32)-1, }
692 .data64 = { 0x7fffffff | 2ULL << 32, }
695 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
698 "jsle32: min/max deduction",
701 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
702 BPF_LD_IMM64(BPF_REG_8, 0x7ffffff0 | 1ULL << 32),
703 BPF_JMP32_REG(BPF_JSLE, BPF_REG_7, BPF_REG_8, 1),
705 BPF_JMP_IMM(BPF_JSLE, BPF_REG_7, 0x7ffffff0, 1),
706 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
709 .errstr_unpriv = "R0 invalid mem access 'scalar'",
710 .result_unpriv = REJECT,
718 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
719 BPF_JMP32_IMM(BPF_JSLT, BPF_REG_7, -1, 1),
721 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
724 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
729 .data64 = { (__u32)-2, }
738 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
744 BPF_LD_IMM64(BPF_REG_8, 0x7fffffff | 1ULL << 32),
745 BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
746 BPF_JMP32_REG(BPF_JSLT, BPF_REG_7, BPF_REG_8, 1),
748 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
751 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
756 .data64 = { 0x7ffffffe, }
759 .data64 = { 0xffffffff, }
762 .data64 = { 0x7fffffff | 2ULL << 32, }
765 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
768 "jslt32: min/max deduction",
771 BPF_ALU32_IMM(BPF_MOV, BPF_REG_0, 2),
772 BPF_LD_IMM64(BPF_REG_8, (__u32)(-1) | 1ULL << 32),
773 BPF_JMP32_REG(BPF_JSLT, BPF_REG_7, BPF_REG_8, 1),
775 BPF_JMP32_IMM(BPF_JSLT, BPF_REG_7, -1, 1),
776 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),
779 .errstr_unpriv = "R0 invalid mem access 'scalar'",
780 .result_unpriv = REJECT,
785 "jgt32: range bound deduction, reg op imm",
787 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
788 BPF_MOV64_REG(BPF_REG_8, BPF_REG_1),
789 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
790 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
791 BPF_LD_MAP_FD(BPF_REG_1, 0),
792 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
793 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9),
794 BPF_MOV64_REG(BPF_REG_1, BPF_REG_8),
795 BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
796 BPF_EMIT_CALL(BPF_FUNC_get_cgroup_classid),
797 BPF_JMP32_IMM(BPF_JGT, BPF_REG_0, 1, 5),
798 BPF_MOV32_REG(BPF_REG_6, BPF_REG_0),
799 BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),
800 BPF_ALU64_IMM(BPF_RSH, BPF_REG_6, 32),
801 BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_6),
802 BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),
803 BPF_MOV32_IMM(BPF_REG_0, 0),
806 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
807 .fixup_map_hash_48b = { 4 },
809 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
812 "jgt32: range bound deduction, reg1 op reg2, reg1 unknown",
814 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
815 BPF_MOV64_REG(BPF_REG_8, BPF_REG_1),
816 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
817 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
818 BPF_LD_MAP_FD(BPF_REG_1, 0),
819 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
820 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 10),
821 BPF_MOV64_REG(BPF_REG_1, BPF_REG_8),
822 BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
823 BPF_EMIT_CALL(BPF_FUNC_get_cgroup_classid),
824 BPF_MOV32_IMM(BPF_REG_2, 1),
825 BPF_JMP32_REG(BPF_JGT, BPF_REG_0, BPF_REG_2, 5),
826 BPF_MOV32_REG(BPF_REG_6, BPF_REG_0),
827 BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),
828 BPF_ALU64_IMM(BPF_RSH, BPF_REG_6, 32),
829 BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_6),
830 BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),
831 BPF_MOV32_IMM(BPF_REG_0, 0),
834 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
835 .fixup_map_hash_48b = { 4 },
837 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
840 "jle32: range bound deduction, reg1 op reg2, reg2 unknown",
842 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
843 BPF_MOV64_REG(BPF_REG_8, BPF_REG_1),
844 BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
845 BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
846 BPF_LD_MAP_FD(BPF_REG_1, 0),
847 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
848 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 10),
849 BPF_MOV64_REG(BPF_REG_1, BPF_REG_8),
850 BPF_MOV64_REG(BPF_REG_8, BPF_REG_0),
851 BPF_EMIT_CALL(BPF_FUNC_get_cgroup_classid),
852 BPF_MOV32_IMM(BPF_REG_2, 1),
853 BPF_JMP32_REG(BPF_JLE, BPF_REG_2, BPF_REG_0, 5),
854 BPF_MOV32_REG(BPF_REG_6, BPF_REG_0),
855 BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),
856 BPF_ALU64_IMM(BPF_RSH, BPF_REG_6, 32),
857 BPF_ALU64_REG(BPF_ADD, BPF_REG_8, BPF_REG_6),
858 BPF_ST_MEM(BPF_B, BPF_REG_8, 0, 0),
859 BPF_MOV32_IMM(BPF_REG_0, 0),
862 .prog_type = BPF_PROG_TYPE_SCHED_CLS,
863 .fixup_map_hash_48b = { 4 },
865 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
868 "jeq32/jne32: bounds checking",
870 BPF_MOV64_IMM(BPF_REG_6, 563),
871 BPF_MOV64_IMM(BPF_REG_2, 0),
872 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
873 BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
874 BPF_ALU32_REG(BPF_OR, BPF_REG_2, BPF_REG_6),
875 BPF_JMP32_IMM(BPF_JNE, BPF_REG_2, 8, 5),
876 BPF_JMP_IMM(BPF_JSGE, BPF_REG_2, 500, 2),
877 BPF_MOV64_IMM(BPF_REG_0, 2),
879 BPF_MOV64_REG(BPF_REG_0, BPF_REG_4),
881 BPF_MOV64_IMM(BPF_REG_0, 1),
884 .prog_type = BPF_PROG_TYPE_SCHED_CLS,