|
238 | 238 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
|
239 | 239 | BPF_LD_MAP_FD(BPF_REG_1, 0),
|
240 | 240 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
|
241 |
| - BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9), |
| 241 | + BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 8), |
242 | 242 | /* r1 = [0x00, 0xff] */
|
243 | 243 | BPF_LDX_MEM(BPF_B, BPF_REG_1, BPF_REG_0, 0),
|
244 | 244 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 0xffffff80 >> 1),
|
|
253 | 253 | * [0xffff'ffff'0000'0080, 0xffff'ffff'ffff'ffff]
|
254 | 254 | */
|
255 | 255 | BPF_ALU64_IMM(BPF_SUB, BPF_REG_1, 0xffffff80 >> 1),
|
256 |
| - /* r1 = 0 or |
257 |
| - * [0x00ff'ffff'ff00'0000, 0x00ff'ffff'ffff'ffff] |
258 |
| - */ |
259 |
| - BPF_ALU64_IMM(BPF_RSH, BPF_REG_1, 8), |
260 | 256 | /* error on OOB pointer computation */
|
261 | 257 | BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
|
262 | 258 | /* exit */
|
|
265 | 261 | },
|
266 | 262 | .fixup_map_hash_8b = { 3 },
|
267 | 263 | /* not actually fully unbounded, but the bound is very high */
|
268 |
| - .errstr = "value 72057594021150720 makes map_value pointer be out of bounds", |
269 |
| - .result = REJECT |
| 264 | + .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds, pointer arithmetic with it prohibited for !root", |
| 265 | + .result_unpriv = REJECT, |
| 266 | + .errstr = "value -4294967168 makes map_value pointer be out of bounds", |
| 267 | + .result = REJECT, |
270 | 268 | },
|
271 | 269 | {
|
272 | 270 | "bounds check after truncation of boundary-crossing range (2)",
|
|
276 | 274 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
|
277 | 275 | BPF_LD_MAP_FD(BPF_REG_1, 0),
|
278 | 276 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
|
279 |
| - BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 9), |
| 277 | + BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 8), |
280 | 278 | /* r1 = [0x00, 0xff] */
|
281 | 279 | BPF_LDX_MEM(BPF_B, BPF_REG_1, BPF_REG_0, 0),
|
282 | 280 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 0xffffff80 >> 1),
|
|
293 | 291 | * [0xffff'ffff'0000'0080, 0xffff'ffff'ffff'ffff]
|
294 | 292 | */
|
295 | 293 | BPF_ALU64_IMM(BPF_SUB, BPF_REG_1, 0xffffff80 >> 1),
|
296 |
| - /* r1 = 0 or |
297 |
| - * [0x00ff'ffff'ff00'0000, 0x00ff'ffff'ffff'ffff] |
298 |
| - */ |
299 |
| - BPF_ALU64_IMM(BPF_RSH, BPF_REG_1, 8), |
300 | 294 | /* error on OOB pointer computation */
|
301 | 295 | BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1),
|
302 | 296 | /* exit */
|
|
305 | 299 | },
|
306 | 300 | .fixup_map_hash_8b = { 3 },
|
307 | 301 | /* not actually fully unbounded, but the bound is very high */
|
308 |
| - .errstr = "value 72057594021150720 makes map_value pointer be out of bounds", |
309 |
| - .result = REJECT |
| 302 | + .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds, pointer arithmetic with it prohibited for !root", |
| 303 | + .result_unpriv = REJECT, |
| 304 | + .errstr = "value -4294967168 makes map_value pointer be out of bounds", |
| 305 | + .result = REJECT, |
310 | 306 | },
|
311 | 307 | {
|
312 | 308 | "bounds check after wrapping 32-bit addition",
|
|
0 commit comments