4 BPF_MOV64_IMM(BPF_REG_0
, 1),
5 BPF_LD_MAP_FD(BPF_REG_6
, 0),
6 BPF_MOV64_REG(BPF_REG_1
, BPF_REG_6
),
7 BPF_MOV64_REG(BPF_REG_2
, BPF_REG_FP
),
8 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_2
, -8),
9 BPF_ST_MEM(BPF_DW
, BPF_REG_FP
, -8, 0),
10 BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem
),
11 BPF_JMP_IMM(BPF_JNE
, BPF_REG_0
, 0, 1),
14 BPF_MOV64_REG(BPF_REG_9
, BPF_REG_0
),
16 BPF_MOV64_REG(BPF_REG_1
, BPF_REG_6
),
17 BPF_MOV64_REG(BPF_REG_2
, BPF_REG_FP
),
18 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_2
, -8),
19 BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem
),
20 BPF_JMP_IMM(BPF_JNE
, BPF_REG_0
, 0, 1),
23 BPF_MOV64_REG(BPF_REG_8
, BPF_REG_0
),
25 BPF_ALU64_REG(BPF_SUB
, BPF_REG_9
, BPF_REG_8
), /* map_value_ptr -= map_value_ptr */
26 BPF_MOV64_REG(BPF_REG_2
, BPF_REG_9
),
27 BPF_JMP_IMM(BPF_JLT
, BPF_REG_2
, 8, 1),
30 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_2
, 1), /* R2=inv(umin=1, umax=8) */
31 BPF_MOV64_REG(BPF_REG_1
, BPF_REG_FP
),
32 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_1
, -8),
33 BPF_MOV64_IMM(BPF_REG_3
, 0),
34 BPF_EMIT_CALL(BPF_FUNC_probe_read_kernel
),
37 .prog_type
= BPF_PROG_TYPE_TRACEPOINT
,
38 .fixup_map_array_48b
= { 1 },
39 .result
= VERBOSE_ACCEPT
,
41 "26: (85) call bpf_probe_read_kernel#113\
42 last_idx 26 first_idx 20\
43 regs=4 stack=0 before 25\
44 regs=4 stack=0 before 24\
45 regs=4 stack=0 before 23\
46 regs=4 stack=0 before 22\
47 regs=4 stack=0 before 20\
48 parent didn't have regs=4 stack=0 marks\
49 last_idx 19 first_idx 10\
50 regs=4 stack=0 before 19\
51 regs=200 stack=0 before 18\
52 regs=300 stack=0 before 17\
53 regs=201 stack=0 before 15\
54 regs=201 stack=0 before 14\
55 regs=200 stack=0 before 13\
56 regs=200 stack=0 before 12\
57 regs=200 stack=0 before 11\
58 regs=200 stack=0 before 10\
59 parent already had regs=0 stack=0 marks",
64 BPF_MOV64_IMM(BPF_REG_0
, 1),
65 BPF_LD_MAP_FD(BPF_REG_6
, 0),
66 BPF_MOV64_REG(BPF_REG_1
, BPF_REG_6
),
67 BPF_MOV64_REG(BPF_REG_2
, BPF_REG_FP
),
68 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_2
, -8),
69 BPF_ST_MEM(BPF_DW
, BPF_REG_FP
, -8, 0),
70 BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem
),
71 BPF_JMP_IMM(BPF_JNE
, BPF_REG_0
, 0, 1),
74 BPF_MOV64_REG(BPF_REG_9
, BPF_REG_0
),
76 BPF_MOV64_REG(BPF_REG_1
, BPF_REG_6
),
77 BPF_MOV64_REG(BPF_REG_2
, BPF_REG_FP
),
78 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_2
, -8),
79 BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem
),
80 BPF_JMP_IMM(BPF_JNE
, BPF_REG_0
, 0, 1),
83 BPF_MOV64_REG(BPF_REG_8
, BPF_REG_0
),
85 BPF_ALU64_REG(BPF_SUB
, BPF_REG_9
, BPF_REG_8
), /* map_value_ptr -= map_value_ptr */
86 BPF_MOV64_REG(BPF_REG_2
, BPF_REG_9
),
87 BPF_JMP_IMM(BPF_JLT
, BPF_REG_2
, 8, 1),
90 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_2
, 1), /* R2=inv(umin=1, umax=8) */
91 BPF_MOV64_REG(BPF_REG_1
, BPF_REG_FP
),
92 BPF_ALU64_IMM(BPF_ADD
, BPF_REG_1
, -8),
93 BPF_MOV64_IMM(BPF_REG_3
, 0),
94 BPF_EMIT_CALL(BPF_FUNC_probe_read_kernel
),
97 .prog_type
= BPF_PROG_TYPE_TRACEPOINT
,
98 .fixup_map_array_48b
= { 1 },
99 .result
= VERBOSE_ACCEPT
,
100 .flags
= BPF_F_TEST_STATE_FREQ
,
102 "26: (85) call bpf_probe_read_kernel#113\
103 last_idx 26 first_idx 22\
104 regs=4 stack=0 before 25\
105 regs=4 stack=0 before 24\
106 regs=4 stack=0 before 23\
107 regs=4 stack=0 before 22\
108 parent didn't have regs=4 stack=0 marks\
109 last_idx 20 first_idx 20\
110 regs=4 stack=0 before 20\
111 parent didn't have regs=4 stack=0 marks\
112 last_idx 19 first_idx 17\
113 regs=4 stack=0 before 19\
114 regs=200 stack=0 before 18\
115 regs=300 stack=0 before 17\
116 parent already had regs=0 stack=0 marks",
119 "precise: cross frame pruning",
121 BPF_RAW_INSN(BPF_JMP
| BPF_CALL
, 0, 0, 0, BPF_FUNC_get_prandom_u32
),
122 BPF_MOV64_IMM(BPF_REG_8
, 0),
123 BPF_JMP_IMM(BPF_JNE
, BPF_REG_0
, 0, 1),
124 BPF_MOV64_IMM(BPF_REG_8
, 1),
125 BPF_RAW_INSN(BPF_JMP
| BPF_CALL
, 0, 0, 0, BPF_FUNC_get_prandom_u32
),
126 BPF_MOV64_IMM(BPF_REG_9
, 0),
127 BPF_JMP_IMM(BPF_JNE
, BPF_REG_0
, 0, 1),
128 BPF_MOV64_IMM(BPF_REG_9
, 1),
129 BPF_MOV64_REG(BPF_REG_1
, BPF_REG_0
),
130 BPF_RAW_INSN(BPF_JMP
| BPF_CALL
, 0, 1, 0, 4),
131 BPF_JMP_IMM(BPF_JEQ
, BPF_REG_8
, 1, 1),
132 BPF_LDX_MEM(BPF_B
, BPF_REG_1
, BPF_REG_2
, 0),
133 BPF_MOV64_IMM(BPF_REG_0
, 0),
135 BPF_JMP_IMM(BPF_JEQ
, BPF_REG_1
, 0, 0),
138 .prog_type
= BPF_PROG_TYPE_XDP
,
139 .flags
= BPF_F_TEST_STATE_FREQ
,
140 .errstr
= "!read_ok",
144 "precise: ST insn causing spi > allocated_stack",
146 BPF_MOV64_REG(BPF_REG_3
, BPF_REG_10
),
147 BPF_JMP_IMM(BPF_JNE
, BPF_REG_3
, 123, 0),
148 BPF_ST_MEM(BPF_DW
, BPF_REG_3
, -8, 0),
149 BPF_LDX_MEM(BPF_DW
, BPF_REG_4
, BPF_REG_10
, -8),
150 BPF_MOV64_IMM(BPF_REG_0
, -1),
151 BPF_JMP_REG(BPF_JGT
, BPF_REG_4
, BPF_REG_0
, 0),
154 .prog_type
= BPF_PROG_TYPE_XDP
,
155 .flags
= BPF_F_TEST_STATE_FREQ
,
156 .errstr
= "5: (2d) if r4 > r0 goto pc+0\
157 last_idx 5 first_idx 5\
158 parent didn't have regs=10 stack=0 marks\
159 last_idx 4 first_idx 2\
160 regs=10 stack=0 before 4\
161 regs=10 stack=0 before 3\
162 regs=0 stack=1 before 2\
163 last_idx 5 first_idx 5\
164 parent didn't have regs=1 stack=0 marks",
165 .result
= VERBOSE_ACCEPT
,
169 "precise: STX insn causing spi > allocated_stack",
171 BPF_RAW_INSN(BPF_JMP
| BPF_CALL
, 0, 0, 0, BPF_FUNC_get_prandom_u32
),
172 BPF_MOV64_REG(BPF_REG_3
, BPF_REG_10
),
173 BPF_JMP_IMM(BPF_JNE
, BPF_REG_3
, 123, 0),
174 BPF_STX_MEM(BPF_DW
, BPF_REG_3
, BPF_REG_0
, -8),
175 BPF_LDX_MEM(BPF_DW
, BPF_REG_4
, BPF_REG_10
, -8),
176 BPF_MOV64_IMM(BPF_REG_0
, -1),
177 BPF_JMP_REG(BPF_JGT
, BPF_REG_4
, BPF_REG_0
, 0),
180 .prog_type
= BPF_PROG_TYPE_XDP
,
181 .flags
= BPF_F_TEST_STATE_FREQ
,
182 .errstr
= "last_idx 6 first_idx 6\
183 parent didn't have regs=10 stack=0 marks\
184 last_idx 5 first_idx 3\
185 regs=10 stack=0 before 5\
186 regs=10 stack=0 before 4\
187 regs=0 stack=1 before 3\
188 last_idx 6 first_idx 6\
189 parent didn't have regs=1 stack=0 marks\
190 last_idx 5 first_idx 3\
191 regs=1 stack=0 before 5",
192 .result
= VERBOSE_ACCEPT
,