diff options
author | Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> | 2016-04-05 06:02:56 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-04-06 16:47:51 -0400 |
commit | 9c94f6c8e0d3d4b1e44eb7ad90849a1c964aabe7 (patch) | |
tree | 538b03ad66ea8d1f51613b86ba1e7b5284233aa6 | |
parent | b64b50eac47046f1ecd23adac650317ccadf400f (diff) |
lib/test_bpf: Add additional BPF_ADD tests
Some of these tests proved useful with the powerpc eBPF JIT port due to
sign-extended 16-bit immediate loads. Though some of these aspects get
covered in other tests, it is better to have explicit tests so as to
quickly tag the precise problem.
Cc: Alexei Starovoitov <ast@fb.com>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Paul Mackerras <paulus@samba.org>
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | lib/test_bpf.c | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/lib/test_bpf.c b/lib/test_bpf.c index 2fb31aa89b9d..8f22fbedc3a6 100644 --- a/lib/test_bpf.c +++ b/lib/test_bpf.c | |||
@@ -2566,6 +2566,70 @@ static struct bpf_test tests[] = { | |||
2566 | { { 0, 0x1 } }, | 2566 | { { 0, 0x1 } }, |
2567 | }, | 2567 | }, |
2568 | { | 2568 | { |
2569 | "ALU_ADD_K: 0 + 0xffff = 0xffff", | ||
2570 | .u.insns_int = { | ||
2571 | BPF_LD_IMM64(R2, 0x0), | ||
2572 | BPF_LD_IMM64(R3, 0xffff), | ||
2573 | BPF_ALU32_IMM(BPF_ADD, R2, 0xffff), | ||
2574 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2575 | BPF_MOV32_IMM(R0, 2), | ||
2576 | BPF_EXIT_INSN(), | ||
2577 | BPF_MOV32_IMM(R0, 1), | ||
2578 | BPF_EXIT_INSN(), | ||
2579 | }, | ||
2580 | INTERNAL, | ||
2581 | { }, | ||
2582 | { { 0, 0x1 } }, | ||
2583 | }, | ||
2584 | { | ||
2585 | "ALU_ADD_K: 0 + 0x7fffffff = 0x7fffffff", | ||
2586 | .u.insns_int = { | ||
2587 | BPF_LD_IMM64(R2, 0x0), | ||
2588 | BPF_LD_IMM64(R3, 0x7fffffff), | ||
2589 | BPF_ALU32_IMM(BPF_ADD, R2, 0x7fffffff), | ||
2590 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2591 | BPF_MOV32_IMM(R0, 2), | ||
2592 | BPF_EXIT_INSN(), | ||
2593 | BPF_MOV32_IMM(R0, 1), | ||
2594 | BPF_EXIT_INSN(), | ||
2595 | }, | ||
2596 | INTERNAL, | ||
2597 | { }, | ||
2598 | { { 0, 0x1 } }, | ||
2599 | }, | ||
2600 | { | ||
2601 | "ALU_ADD_K: 0 + 0x80000000 = 0x80000000", | ||
2602 | .u.insns_int = { | ||
2603 | BPF_LD_IMM64(R2, 0x0), | ||
2604 | BPF_LD_IMM64(R3, 0x80000000), | ||
2605 | BPF_ALU32_IMM(BPF_ADD, R2, 0x80000000), | ||
2606 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2607 | BPF_MOV32_IMM(R0, 2), | ||
2608 | BPF_EXIT_INSN(), | ||
2609 | BPF_MOV32_IMM(R0, 1), | ||
2610 | BPF_EXIT_INSN(), | ||
2611 | }, | ||
2612 | INTERNAL, | ||
2613 | { }, | ||
2614 | { { 0, 0x1 } }, | ||
2615 | }, | ||
2616 | { | ||
2617 | "ALU_ADD_K: 0 + 0x80008000 = 0x80008000", | ||
2618 | .u.insns_int = { | ||
2619 | BPF_LD_IMM64(R2, 0x0), | ||
2620 | BPF_LD_IMM64(R3, 0x80008000), | ||
2621 | BPF_ALU32_IMM(BPF_ADD, R2, 0x80008000), | ||
2622 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2623 | BPF_MOV32_IMM(R0, 2), | ||
2624 | BPF_EXIT_INSN(), | ||
2625 | BPF_MOV32_IMM(R0, 1), | ||
2626 | BPF_EXIT_INSN(), | ||
2627 | }, | ||
2628 | INTERNAL, | ||
2629 | { }, | ||
2630 | { { 0, 0x1 } }, | ||
2631 | }, | ||
2632 | { | ||
2569 | "ALU64_ADD_K: 1 + 2 = 3", | 2633 | "ALU64_ADD_K: 1 + 2 = 3", |
2570 | .u.insns_int = { | 2634 | .u.insns_int = { |
2571 | BPF_LD_IMM64(R0, 1), | 2635 | BPF_LD_IMM64(R0, 1), |
@@ -2657,6 +2721,70 @@ static struct bpf_test tests[] = { | |||
2657 | { }, | 2721 | { }, |
2658 | { { 0, 0x1 } }, | 2722 | { { 0, 0x1 } }, |
2659 | }, | 2723 | }, |
2724 | { | ||
2725 | "ALU64_ADD_K: 0 + 0xffff = 0xffff", | ||
2726 | .u.insns_int = { | ||
2727 | BPF_LD_IMM64(R2, 0x0), | ||
2728 | BPF_LD_IMM64(R3, 0xffff), | ||
2729 | BPF_ALU64_IMM(BPF_ADD, R2, 0xffff), | ||
2730 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2731 | BPF_MOV32_IMM(R0, 2), | ||
2732 | BPF_EXIT_INSN(), | ||
2733 | BPF_MOV32_IMM(R0, 1), | ||
2734 | BPF_EXIT_INSN(), | ||
2735 | }, | ||
2736 | INTERNAL, | ||
2737 | { }, | ||
2738 | { { 0, 0x1 } }, | ||
2739 | }, | ||
2740 | { | ||
2741 | "ALU64_ADD_K: 0 + 0x7fffffff = 0x7fffffff", | ||
2742 | .u.insns_int = { | ||
2743 | BPF_LD_IMM64(R2, 0x0), | ||
2744 | BPF_LD_IMM64(R3, 0x7fffffff), | ||
2745 | BPF_ALU64_IMM(BPF_ADD, R2, 0x7fffffff), | ||
2746 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2747 | BPF_MOV32_IMM(R0, 2), | ||
2748 | BPF_EXIT_INSN(), | ||
2749 | BPF_MOV32_IMM(R0, 1), | ||
2750 | BPF_EXIT_INSN(), | ||
2751 | }, | ||
2752 | INTERNAL, | ||
2753 | { }, | ||
2754 | { { 0, 0x1 } }, | ||
2755 | }, | ||
2756 | { | ||
2757 | "ALU64_ADD_K: 0 + 0x80000000 = 0xffffffff80000000", | ||
2758 | .u.insns_int = { | ||
2759 | BPF_LD_IMM64(R2, 0x0), | ||
2760 | BPF_LD_IMM64(R3, 0xffffffff80000000LL), | ||
2761 | BPF_ALU64_IMM(BPF_ADD, R2, 0x80000000), | ||
2762 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2763 | BPF_MOV32_IMM(R0, 2), | ||
2764 | BPF_EXIT_INSN(), | ||
2765 | BPF_MOV32_IMM(R0, 1), | ||
2766 | BPF_EXIT_INSN(), | ||
2767 | }, | ||
2768 | INTERNAL, | ||
2769 | { }, | ||
2770 | { { 0, 0x1 } }, | ||
2771 | }, | ||
2772 | { | ||
2773 | "ALU_ADD_K: 0 + 0x80008000 = 0xffffffff80008000", | ||
2774 | .u.insns_int = { | ||
2775 | BPF_LD_IMM64(R2, 0x0), | ||
2776 | BPF_LD_IMM64(R3, 0xffffffff80008000LL), | ||
2777 | BPF_ALU64_IMM(BPF_ADD, R2, 0x80008000), | ||
2778 | BPF_JMP_REG(BPF_JEQ, R2, R3, 2), | ||
2779 | BPF_MOV32_IMM(R0, 2), | ||
2780 | BPF_EXIT_INSN(), | ||
2781 | BPF_MOV32_IMM(R0, 1), | ||
2782 | BPF_EXIT_INSN(), | ||
2783 | }, | ||
2784 | INTERNAL, | ||
2785 | { }, | ||
2786 | { { 0, 0x1 } }, | ||
2787 | }, | ||
2660 | /* BPF_ALU | BPF_SUB | BPF_X */ | 2788 | /* BPF_ALU | BPF_SUB | BPF_X */ |
2661 | { | 2789 | { |
2662 | "ALU_SUB_X: 3 - 1 = 2", | 2790 | "ALU_SUB_X: 3 - 1 = 2", |