|
29 | 29 | {
|
30 | 30 | "helper access to variable memory: stack, bitwise AND, zero included",
|
31 | 31 | .insns = {
|
| 32 | + BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, 8), |
32 | 33 | BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
33 | 34 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -64),
|
34 |
| - BPF_MOV64_IMM(BPF_REG_2, 16), |
35 | 35 | BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_2, -128),
|
36 | 36 | BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, -128),
|
37 | 37 | BPF_ALU64_IMM(BPF_AND, BPF_REG_2, 64),
|
|
46 | 46 | {
|
47 | 47 | "helper access to variable memory: stack, bitwise AND + JMP, wrong max",
|
48 | 48 | .insns = {
|
| 49 | + BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, 8), |
49 | 50 | BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
50 | 51 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -64),
|
51 |
| - BPF_MOV64_IMM(BPF_REG_2, 16), |
52 | 52 | BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_2, -128),
|
53 | 53 | BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, -128),
|
54 | 54 | BPF_ALU64_IMM(BPF_AND, BPF_REG_2, 65),
|
|
122 | 122 | {
|
123 | 123 | "helper access to variable memory: stack, JMP, bounds + offset",
|
124 | 124 | .insns = {
|
| 125 | + BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, 8), |
125 | 126 | BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
126 | 127 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -64),
|
127 |
| - BPF_MOV64_IMM(BPF_REG_2, 16), |
128 | 128 | BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_2, -128),
|
129 | 129 | BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, -128),
|
130 | 130 | BPF_JMP_IMM(BPF_JGT, BPF_REG_2, 64, 5),
|
|
143 | 143 | {
|
144 | 144 | "helper access to variable memory: stack, JMP, wrong max",
|
145 | 145 | .insns = {
|
| 146 | + BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, 8), |
146 | 147 | BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
147 | 148 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -64),
|
148 |
| - BPF_MOV64_IMM(BPF_REG_2, 16), |
149 | 149 | BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_2, -128),
|
150 | 150 | BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, -128),
|
151 | 151 | BPF_JMP_IMM(BPF_JGT, BPF_REG_2, 65, 4),
|
|
163 | 163 | {
|
164 | 164 | "helper access to variable memory: stack, JMP, no max check",
|
165 | 165 | .insns = {
|
| 166 | + BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, 8), |
166 | 167 | BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
167 | 168 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -64),
|
168 |
| - BPF_MOV64_IMM(BPF_REG_2, 16), |
169 | 169 | BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_2, -128),
|
170 | 170 | BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, -128),
|
171 | 171 | BPF_MOV64_IMM(BPF_REG_4, 0),
|
|
183 | 183 | {
|
184 | 184 | "helper access to variable memory: stack, JMP, no min check",
|
185 | 185 | .insns = {
|
| 186 | + BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, 8), |
186 | 187 | BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
187 | 188 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -64),
|
188 |
| - BPF_MOV64_IMM(BPF_REG_2, 16), |
189 | 189 | BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_2, -128),
|
190 | 190 | BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, -128),
|
191 | 191 | BPF_JMP_IMM(BPF_JGT, BPF_REG_2, 64, 3),
|
|
201 | 201 | {
|
202 | 202 | "helper access to variable memory: stack, JMP (signed), no min check",
|
203 | 203 | .insns = {
|
| 204 | + BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, 8), |
204 | 205 | BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
205 | 206 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -64),
|
206 |
| - BPF_MOV64_IMM(BPF_REG_2, 16), |
207 | 207 | BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_2, -128),
|
208 | 208 | BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, -128),
|
209 | 209 | BPF_JMP_IMM(BPF_JSGT, BPF_REG_2, 64, 3),
|
|
244 | 244 | {
|
245 | 245 | "helper access to variable memory: map, JMP, wrong max",
|
246 | 246 | .insns = {
|
| 247 | + BPF_LDX_MEM(BPF_DW, BPF_REG_6, BPF_REG_1, 8), |
247 | 248 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
|
248 | 249 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
|
249 | 250 | BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
|
250 | 251 | BPF_LD_MAP_FD(BPF_REG_1, 0),
|
251 | 252 | BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),
|
252 | 253 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 10),
|
253 | 254 | BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
|
254 |
| - BPF_MOV64_IMM(BPF_REG_2, sizeof(struct test_val)), |
| 255 | + BPF_MOV64_REG(BPF_REG_2, BPF_REG_6), |
255 | 256 | BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_2, -128),
|
256 | 257 | BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_10, -128),
|
257 | 258 | BPF_JMP_IMM(BPF_JSGT, BPF_REG_2, sizeof(struct test_val) + 1, 4),
|
|
262 | 263 | BPF_MOV64_IMM(BPF_REG_0, 0),
|
263 | 264 | BPF_EXIT_INSN(),
|
264 | 265 | },
|
265 |
| - .fixup_map_hash_48b = { 3 }, |
| 266 | + .fixup_map_hash_48b = { 4 }, |
266 | 267 | .errstr = "invalid access to map value, value_size=48 off=0 size=49",
|
267 | 268 | .result = REJECT,
|
268 | 269 | .prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
|
296 | 297 | {
|
297 | 298 | "helper access to variable memory: map adjusted, JMP, wrong max",
|
298 | 299 | .insns = {
|
| 300 | + BPF_LDX_MEM(BPF_DW, BPF_REG_6, BPF_REG_1, 8), |
299 | 301 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
|
300 | 302 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
|
301 | 303 | BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0),
|
|
304 | 306 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 11),
|
305 | 307 | BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
|
306 | 308 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 20),
|
307 |
| - BPF_MOV64_IMM(BPF_REG_2, sizeof(struct test_val)), |
| 309 | + BPF_MOV64_REG(BPF_REG_2, BPF_REG_6), |
308 | 310 | BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_2, -128),
|
309 | 311 | BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_10, -128),
|
310 | 312 | BPF_JMP_IMM(BPF_JSGT, BPF_REG_2, sizeof(struct test_val) - 19, 4),
|
|
315 | 317 | BPF_MOV64_IMM(BPF_REG_0, 0),
|
316 | 318 | BPF_EXIT_INSN(),
|
317 | 319 | },
|
318 |
| - .fixup_map_hash_48b = { 3 }, |
| 320 | + .fixup_map_hash_48b = { 4 }, |
319 | 321 | .errstr = "R1 min value is outside of the array range",
|
320 | 322 | .result = REJECT,
|
321 | 323 | .prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
|
337 | 339 | {
|
338 | 340 | "helper access to variable memory: size > 0 not allowed on NULL (ARG_PTR_TO_MEM_OR_NULL)",
|
339 | 341 | .insns = {
|
| 342 | + BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 0), |
340 | 343 | BPF_MOV64_IMM(BPF_REG_1, 0),
|
341 |
| - BPF_MOV64_IMM(BPF_REG_2, 1), |
342 | 344 | BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_2, -128),
|
343 | 345 | BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_10, -128),
|
344 | 346 | BPF_ALU64_IMM(BPF_AND, BPF_REG_2, 64),
|
|
562 | 564 | {
|
563 | 565 | "helper access to variable memory: 8 bytes leak",
|
564 | 566 | .insns = {
|
| 567 | + BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, 8), |
565 | 568 | BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),
|
566 | 569 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -64),
|
567 | 570 | BPF_MOV64_IMM(BPF_REG_0, 0),
|
|
572 | 575 | BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_0, -24),
|
573 | 576 | BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_0, -16),
|
574 | 577 | BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_0, -8),
|
575 |
| - BPF_MOV64_IMM(BPF_REG_2, 1), |
576 | 578 | BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_2, -128),
|
577 | 579 | BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_10, -128),
|
578 | 580 | BPF_ALU64_IMM(BPF_AND, BPF_REG_2, 63),
|
|
0 commit comments