diff options
| author | Alexei Starovoitov <ast@plumgrid.com> | 2014-09-29 21:50:02 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-10-01 21:30:33 -0400 |
| commit | fd10c2ef3e0ad82a4003d8005f3e7716d19a9376 (patch) | |
| tree | f76249eeb9f167a7e4dd4f609447cbeb7a2b9e91 /samples | |
| parent | f1bca824dabba4ffe8582f87ca587780befce7ad (diff) | |
bpf: add tests to verifier testsuite
add 4 extra tests to cover jump verification better
Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'samples')
| -rw-r--r-- | samples/bpf/test_verifier.c | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/samples/bpf/test_verifier.c b/samples/bpf/test_verifier.c index d10992e2740e..f44ef11f65a7 100644 --- a/samples/bpf/test_verifier.c +++ b/samples/bpf/test_verifier.c | |||
| @@ -461,6 +461,136 @@ static struct bpf_test tests[] = { | |||
| 461 | .errstr = "R0 invalid mem access", | 461 | .errstr = "R0 invalid mem access", |
| 462 | .result = REJECT, | 462 | .result = REJECT, |
| 463 | }, | 463 | }, |
| 464 | { | ||
| 465 | "jump test 1", | ||
| 466 | .insns = { | ||
| 467 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), | ||
| 468 | BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_1, -8), | ||
| 469 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 1), | ||
| 470 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -8, 0), | ||
| 471 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 1, 1), | ||
| 472 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -16, 1), | ||
| 473 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 2, 1), | ||
| 474 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -8, 2), | ||
| 475 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 3, 1), | ||
| 476 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -16, 3), | ||
| 477 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 4, 1), | ||
| 478 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -8, 4), | ||
| 479 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 5, 1), | ||
| 480 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -32, 5), | ||
| 481 | BPF_MOV64_IMM(BPF_REG_0, 0), | ||
| 482 | BPF_EXIT_INSN(), | ||
| 483 | }, | ||
| 484 | .result = ACCEPT, | ||
| 485 | }, | ||
| 486 | { | ||
| 487 | "jump test 2", | ||
| 488 | .insns = { | ||
| 489 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), | ||
| 490 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 2), | ||
| 491 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -8, 0), | ||
| 492 | BPF_JMP_IMM(BPF_JA, 0, 0, 14), | ||
| 493 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 1, 2), | ||
| 494 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -16, 0), | ||
| 495 | BPF_JMP_IMM(BPF_JA, 0, 0, 11), | ||
| 496 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 2, 2), | ||
| 497 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -32, 0), | ||
| 498 | BPF_JMP_IMM(BPF_JA, 0, 0, 8), | ||
| 499 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 3, 2), | ||
| 500 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -40, 0), | ||
| 501 | BPF_JMP_IMM(BPF_JA, 0, 0, 5), | ||
| 502 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 4, 2), | ||
| 503 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -48, 0), | ||
| 504 | BPF_JMP_IMM(BPF_JA, 0, 0, 2), | ||
| 505 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 5, 1), | ||
| 506 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -56, 0), | ||
| 507 | BPF_MOV64_IMM(BPF_REG_0, 0), | ||
| 508 | BPF_EXIT_INSN(), | ||
| 509 | }, | ||
| 510 | .result = ACCEPT, | ||
| 511 | }, | ||
| 512 | { | ||
| 513 | "jump test 3", | ||
| 514 | .insns = { | ||
| 515 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), | ||
| 516 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 3), | ||
| 517 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -8, 0), | ||
| 518 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), | ||
| 519 | BPF_JMP_IMM(BPF_JA, 0, 0, 19), | ||
| 520 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 1, 3), | ||
| 521 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -16, 0), | ||
| 522 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -16), | ||
| 523 | BPF_JMP_IMM(BPF_JA, 0, 0, 15), | ||
| 524 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 2, 3), | ||
| 525 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -32, 0), | ||
| 526 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -32), | ||
| 527 | BPF_JMP_IMM(BPF_JA, 0, 0, 11), | ||
| 528 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 3, 3), | ||
| 529 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -40, 0), | ||
| 530 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -40), | ||
| 531 | BPF_JMP_IMM(BPF_JA, 0, 0, 7), | ||
| 532 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 4, 3), | ||
| 533 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -48, 0), | ||
| 534 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -48), | ||
| 535 | BPF_JMP_IMM(BPF_JA, 0, 0, 3), | ||
| 536 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 5, 0), | ||
| 537 | BPF_ST_MEM(BPF_DW, BPF_REG_2, -56, 0), | ||
| 538 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -56), | ||
| 539 | BPF_LD_MAP_FD(BPF_REG_1, 0), | ||
| 540 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_unspec), | ||
| 541 | BPF_EXIT_INSN(), | ||
| 542 | }, | ||
| 543 | .fixup = {24}, | ||
| 544 | .result = ACCEPT, | ||
| 545 | }, | ||
| 546 | { | ||
| 547 | "jump test 4", | ||
| 548 | .insns = { | ||
| 549 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1), | ||
| 550 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2), | ||
| 551 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3), | ||
| 552 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4), | ||
| 553 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1), | ||
| 554 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2), | ||
| 555 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3), | ||
| 556 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4), | ||
| 557 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1), | ||
| 558 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2), | ||
| 559 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3), | ||
| 560 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4), | ||
| 561 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1), | ||
| 562 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2), | ||
| 563 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3), | ||
| 564 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4), | ||
| 565 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1), | ||
| 566 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2), | ||
| 567 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3), | ||
| 568 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4), | ||
| 569 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1), | ||
| 570 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2), | ||
| 571 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3), | ||
| 572 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4), | ||
| 573 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1), | ||
| 574 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2), | ||
| 575 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3), | ||
| 576 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4), | ||
| 577 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1), | ||
| 578 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2), | ||
| 579 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3), | ||
| 580 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4), | ||
| 581 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 1), | ||
| 582 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 2), | ||
| 583 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 3), | ||
| 584 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 4), | ||
| 585 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 0), | ||
| 586 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 0), | ||
| 587 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 0), | ||
| 588 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, BPF_REG_10, 0), | ||
| 589 | BPF_MOV64_IMM(BPF_REG_0, 0), | ||
| 590 | BPF_EXIT_INSN(), | ||
| 591 | }, | ||
| 592 | .result = ACCEPT, | ||
| 593 | }, | ||
| 464 | }; | 594 | }; |
| 465 | 595 | ||
| 466 | static int probe_filter_length(struct bpf_insn *fp) | 596 | static int probe_filter_length(struct bpf_insn *fp) |
