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) |