diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/test_bpf.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/test_bpf.c b/lib/test_bpf.c index 889bc31785be..be88cbaadde3 100644 --- a/lib/test_bpf.c +++ b/lib/test_bpf.c | |||
| @@ -4504,6 +4504,44 @@ static struct bpf_test tests[] = { | |||
| 4504 | { }, | 4504 | { }, |
| 4505 | { { 0, 1 } }, | 4505 | { { 0, 1 } }, |
| 4506 | }, | 4506 | }, |
| 4507 | { | ||
| 4508 | "JMP_JSGE_K: Signed jump: value walk 1", | ||
| 4509 | .u.insns_int = { | ||
| 4510 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
| 4511 | BPF_LD_IMM64(R1, -3), | ||
| 4512 | BPF_JMP_IMM(BPF_JSGE, R1, 0, 6), | ||
| 4513 | BPF_ALU64_IMM(BPF_ADD, R1, 1), | ||
| 4514 | BPF_JMP_IMM(BPF_JSGE, R1, 0, 4), | ||
| 4515 | BPF_ALU64_IMM(BPF_ADD, R1, 1), | ||
| 4516 | BPF_JMP_IMM(BPF_JSGE, R1, 0, 2), | ||
| 4517 | BPF_ALU64_IMM(BPF_ADD, R1, 1), | ||
| 4518 | BPF_JMP_IMM(BPF_JSGE, R1, 0, 1), | ||
| 4519 | BPF_EXIT_INSN(), /* bad exit */ | ||
| 4520 | BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */ | ||
| 4521 | BPF_EXIT_INSN(), | ||
| 4522 | }, | ||
| 4523 | INTERNAL, | ||
| 4524 | { }, | ||
| 4525 | { { 0, 1 } }, | ||
| 4526 | }, | ||
| 4527 | { | ||
| 4528 | "JMP_JSGE_K: Signed jump: value walk 2", | ||
| 4529 | .u.insns_int = { | ||
| 4530 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
| 4531 | BPF_LD_IMM64(R1, -3), | ||
| 4532 | BPF_JMP_IMM(BPF_JSGE, R1, 0, 4), | ||
| 4533 | BPF_ALU64_IMM(BPF_ADD, R1, 2), | ||
| 4534 | BPF_JMP_IMM(BPF_JSGE, R1, 0, 2), | ||
| 4535 | BPF_ALU64_IMM(BPF_ADD, R1, 2), | ||
| 4536 | BPF_JMP_IMM(BPF_JSGE, R1, 0, 1), | ||
| 4537 | BPF_EXIT_INSN(), /* bad exit */ | ||
| 4538 | BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */ | ||
| 4539 | BPF_EXIT_INSN(), | ||
| 4540 | }, | ||
| 4541 | INTERNAL, | ||
| 4542 | { }, | ||
| 4543 | { { 0, 1 } }, | ||
| 4544 | }, | ||
| 4507 | /* BPF_JMP | BPF_JGT | BPF_K */ | 4545 | /* BPF_JMP | BPF_JGT | BPF_K */ |
| 4508 | { | 4546 | { |
| 4509 | "JMP_JGT_K: if (3 > 2) return 1", | 4547 | "JMP_JGT_K: if (3 > 2) return 1", |
