diff options
Diffstat (limited to 'lib/test_bpf.c')
-rw-r--r-- | lib/test_bpf.c | 229 |
1 files changed, 225 insertions, 4 deletions
diff --git a/lib/test_bpf.c b/lib/test_bpf.c index 27a7a26b1ece..8f22fbedc3a6 100644 --- a/lib/test_bpf.c +++ b/lib/test_bpf.c | |||
@@ -2444,6 +2444,22 @@ static struct bpf_test tests[] = { | |||
2444 | { { 0, 4294967295U } }, | 2444 | { { 0, 4294967295U } }, |
2445 | }, | 2445 | }, |
2446 | { | 2446 | { |
2447 | "ALU_ADD_X: 2 + 4294967294 = 0", | ||
2448 | .u.insns_int = { | ||
2449 | BPF_LD_IMM64(R0, 2), | ||
2450 | BPF_LD_IMM64(R1, 4294967294U), | ||
2451 | BPF_ALU32_REG(BPF_ADD, R0, R1), | ||
2452 | BPF_JMP_IMM(BPF_JEQ, R0, 0, 2), | ||
2453 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
2454 | BPF_EXIT_INSN(), | ||
2455 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | ||
2456 | BPF_EXIT_INSN(), | ||
2457 | }, | ||
2458 | INTERNAL, | ||
2459 | { }, | ||
2460 | { { 0, 1 } }, | ||
2461 | }, | ||
2462 | { | ||
2447 | "ALU64_ADD_X: 1 + 2 = 3", | 2463 | "ALU64_ADD_X: 1 + 2 = 3", |
2448 | .u.insns_int = { | 2464 | .u.insns_int = { |
2449 | BPF_LD_IMM64(R0, 1), | 2465 | BPF_LD_IMM64(R0, 1), |
@@ -2467,6 +2483,23 @@ static struct bpf_test tests[] = { | |||
2467 | { }, | 2483 | { }, |
2468 | { { 0, 4294967295U } }, | 2484 | { { 0, 4294967295U } }, |
2469 | }, | 2485 | }, |
2486 | { | ||
2487 | "ALU64_ADD_X: 2 + 4294967294 = 4294967296", | ||
2488 | .u.insns_int = { | ||
2489 | BPF_LD_IMM64(R0, 2), | ||
2490 | BPF_LD_IMM64(R1, 4294967294U), | ||
2491 | BPF_LD_IMM64(R2, 4294967296ULL), | ||
2492 | BPF_ALU64_REG(BPF_ADD, R0, R1), | ||
2493 | BPF_JMP_REG(BPF_JEQ, R0, R2, 2), | ||
2494 | BPF_MOV32_IMM(R0, 0), | ||
2495 | BPF_EXIT_INSN(), | ||
2496 | BPF_MOV32_IMM(R0, 1), | ||
2497 | BPF_EXIT_INSN(), | ||
2498 | }, | ||
2499 | INTERNAL, | ||
2500 | { }, | ||
2501 | { { 0, 1 } }, | ||
2502 | }, | ||
2470 | /* BPF_ALU | BPF_ADD | BPF_K */ | 2503 | /* BPF_ALU | BPF_ADD | BPF_K */ |
2471 | { | 2504 | { |
2472 | "ALU_ADD_K: 1 + 2 = 3", | 2505 | "ALU_ADD_K: 1 + 2 = 3", |
@@ -2502,6 +2535,21 @@ static struct bpf_test tests[] = { | |||
2502 | { { 0, 4294967295U } }, | 2535 | { { 0, 4294967295U } }, |
2503 | }, | 2536 | }, |
2504 | { | 2537 | { |
2538 | "ALU_ADD_K: 4294967294 + 2 = 0", | ||
2539 | .u.insns_int = { | ||
2540 | BPF_LD_IMM64(R0, 4294967294U), | ||
2541 | BPF_ALU32_IMM(BPF_ADD, R0, 2), | ||
2542 | BPF_JMP_IMM(BPF_JEQ, R0, 0, 2), | ||
2543 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
2544 | BPF_EXIT_INSN(), | ||
2545 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | ||
2546 | BPF_EXIT_INSN(), | ||
2547 | }, | ||
2548 | INTERNAL, | ||
2549 | { }, | ||
2550 | { { 0, 1 } }, | ||
2551 | }, | ||
2552 | { | ||
2505 | "ALU_ADD_K: 0 + (-1) = 0x00000000ffffffff", | 2553 | "ALU_ADD_K: 0 + (-1) = 0x00000000ffffffff", |
2506 | .u.insns_int = { | 2554 | .u.insns_int = { |
2507 | BPF_LD_IMM64(R2, 0x0), | 2555 | BPF_LD_IMM64(R2, 0x0), |
@@ -2518,6 +2566,70 @@ static struct bpf_test tests[] = { | |||
2518 | { { 0, 0x1 } }, | 2566 | { { 0, 0x1 } }, |
2519 | }, | 2567 | }, |
2520 | { | 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 | { | ||
2521 | "ALU64_ADD_K: 1 + 2 = 3", | 2633 | "ALU64_ADD_K: 1 + 2 = 3", |
2522 | .u.insns_int = { | 2634 | .u.insns_int = { |
2523 | BPF_LD_IMM64(R0, 1), | 2635 | BPF_LD_IMM64(R0, 1), |
@@ -2551,6 +2663,22 @@ static struct bpf_test tests[] = { | |||
2551 | { { 0, 2147483647 } }, | 2663 | { { 0, 2147483647 } }, |
2552 | }, | 2664 | }, |
2553 | { | 2665 | { |
2666 | "ALU64_ADD_K: 4294967294 + 2 = 4294967296", | ||
2667 | .u.insns_int = { | ||
2668 | BPF_LD_IMM64(R0, 4294967294U), | ||
2669 | BPF_LD_IMM64(R1, 4294967296ULL), | ||
2670 | BPF_ALU64_IMM(BPF_ADD, R0, 2), | ||
2671 | BPF_JMP_REG(BPF_JEQ, R0, R1, 2), | ||
2672 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
2673 | BPF_EXIT_INSN(), | ||
2674 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | ||
2675 | BPF_EXIT_INSN(), | ||
2676 | }, | ||
2677 | INTERNAL, | ||
2678 | { }, | ||
2679 | { { 0, 1 } }, | ||
2680 | }, | ||
2681 | { | ||
2554 | "ALU64_ADD_K: 2147483646 + -2147483647 = -1", | 2682 | "ALU64_ADD_K: 2147483646 + -2147483647 = -1", |
2555 | .u.insns_int = { | 2683 | .u.insns_int = { |
2556 | BPF_LD_IMM64(R0, 2147483646), | 2684 | BPF_LD_IMM64(R0, 2147483646), |
@@ -2593,6 +2721,70 @@ static struct bpf_test tests[] = { | |||
2593 | { }, | 2721 | { }, |
2594 | { { 0, 0x1 } }, | 2722 | { { 0, 0x1 } }, |
2595 | }, | 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 | }, | ||
2596 | /* BPF_ALU | BPF_SUB | BPF_X */ | 2788 | /* BPF_ALU | BPF_SUB | BPF_X */ |
2597 | { | 2789 | { |
2598 | "ALU_SUB_X: 3 - 1 = 2", | 2790 | "ALU_SUB_X: 3 - 1 = 2", |
@@ -4222,6 +4414,20 @@ static struct bpf_test tests[] = { | |||
4222 | { }, | 4414 | { }, |
4223 | { { 0, 1 } }, | 4415 | { { 0, 1 } }, |
4224 | }, | 4416 | }, |
4417 | { | ||
4418 | "JMP_JGT_K: Unsigned jump: if (-1 > 1) return 1", | ||
4419 | .u.insns_int = { | ||
4420 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
4421 | BPF_LD_IMM64(R1, -1), | ||
4422 | BPF_JMP_IMM(BPF_JGT, R1, 1, 1), | ||
4423 | BPF_EXIT_INSN(), | ||
4424 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | ||
4425 | BPF_EXIT_INSN(), | ||
4426 | }, | ||
4427 | INTERNAL, | ||
4428 | { }, | ||
4429 | { { 0, 1 } }, | ||
4430 | }, | ||
4225 | /* BPF_JMP | BPF_JGE | BPF_K */ | 4431 | /* BPF_JMP | BPF_JGE | BPF_K */ |
4226 | { | 4432 | { |
4227 | "JMP_JGE_K: if (3 >= 2) return 1", | 4433 | "JMP_JGE_K: if (3 >= 2) return 1", |
@@ -4303,7 +4509,7 @@ static struct bpf_test tests[] = { | |||
4303 | .u.insns_int = { | 4509 | .u.insns_int = { |
4304 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | 4510 | BPF_ALU32_IMM(BPF_MOV, R0, 0), |
4305 | BPF_LD_IMM64(R1, 3), | 4511 | BPF_LD_IMM64(R1, 3), |
4306 | BPF_JMP_IMM(BPF_JNE, R1, 2, 1), | 4512 | BPF_JMP_IMM(BPF_JSET, R1, 2, 1), |
4307 | BPF_EXIT_INSN(), | 4513 | BPF_EXIT_INSN(), |
4308 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | 4514 | BPF_ALU32_IMM(BPF_MOV, R0, 1), |
4309 | BPF_EXIT_INSN(), | 4515 | BPF_EXIT_INSN(), |
@@ -4317,7 +4523,7 @@ static struct bpf_test tests[] = { | |||
4317 | .u.insns_int = { | 4523 | .u.insns_int = { |
4318 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | 4524 | BPF_ALU32_IMM(BPF_MOV, R0, 0), |
4319 | BPF_LD_IMM64(R1, 3), | 4525 | BPF_LD_IMM64(R1, 3), |
4320 | BPF_JMP_IMM(BPF_JNE, R1, 0xffffffff, 1), | 4526 | BPF_JMP_IMM(BPF_JSET, R1, 0xffffffff, 1), |
4321 | BPF_EXIT_INSN(), | 4527 | BPF_EXIT_INSN(), |
4322 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | 4528 | BPF_ALU32_IMM(BPF_MOV, R0, 1), |
4323 | BPF_EXIT_INSN(), | 4529 | BPF_EXIT_INSN(), |
@@ -4404,6 +4610,21 @@ static struct bpf_test tests[] = { | |||
4404 | { }, | 4610 | { }, |
4405 | { { 0, 1 } }, | 4611 | { { 0, 1 } }, |
4406 | }, | 4612 | }, |
4613 | { | ||
4614 | "JMP_JGT_X: Unsigned jump: if (-1 > 1) return 1", | ||
4615 | .u.insns_int = { | ||
4616 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | ||
4617 | BPF_LD_IMM64(R1, -1), | ||
4618 | BPF_LD_IMM64(R2, 1), | ||
4619 | BPF_JMP_REG(BPF_JGT, R1, R2, 1), | ||
4620 | BPF_EXIT_INSN(), | ||
4621 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | ||
4622 | BPF_EXIT_INSN(), | ||
4623 | }, | ||
4624 | INTERNAL, | ||
4625 | { }, | ||
4626 | { { 0, 1 } }, | ||
4627 | }, | ||
4407 | /* BPF_JMP | BPF_JGE | BPF_X */ | 4628 | /* BPF_JMP | BPF_JGE | BPF_X */ |
4408 | { | 4629 | { |
4409 | "JMP_JGE_X: if (3 >= 2) return 1", | 4630 | "JMP_JGE_X: if (3 >= 2) return 1", |
@@ -4474,7 +4695,7 @@ static struct bpf_test tests[] = { | |||
4474 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | 4695 | BPF_ALU32_IMM(BPF_MOV, R0, 0), |
4475 | BPF_LD_IMM64(R1, 3), | 4696 | BPF_LD_IMM64(R1, 3), |
4476 | BPF_LD_IMM64(R2, 2), | 4697 | BPF_LD_IMM64(R2, 2), |
4477 | BPF_JMP_REG(BPF_JNE, R1, R2, 1), | 4698 | BPF_JMP_REG(BPF_JSET, R1, R2, 1), |
4478 | BPF_EXIT_INSN(), | 4699 | BPF_EXIT_INSN(), |
4479 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | 4700 | BPF_ALU32_IMM(BPF_MOV, R0, 1), |
4480 | BPF_EXIT_INSN(), | 4701 | BPF_EXIT_INSN(), |
@@ -4489,7 +4710,7 @@ static struct bpf_test tests[] = { | |||
4489 | BPF_ALU32_IMM(BPF_MOV, R0, 0), | 4710 | BPF_ALU32_IMM(BPF_MOV, R0, 0), |
4490 | BPF_LD_IMM64(R1, 3), | 4711 | BPF_LD_IMM64(R1, 3), |
4491 | BPF_LD_IMM64(R2, 0xffffffff), | 4712 | BPF_LD_IMM64(R2, 0xffffffff), |
4492 | BPF_JMP_REG(BPF_JNE, R1, R2, 1), | 4713 | BPF_JMP_REG(BPF_JSET, R1, R2, 1), |
4493 | BPF_EXIT_INSN(), | 4714 | BPF_EXIT_INSN(), |
4494 | BPF_ALU32_IMM(BPF_MOV, R0, 1), | 4715 | BPF_ALU32_IMM(BPF_MOV, R0, 1), |
4495 | BPF_EXIT_INSN(), | 4716 | BPF_EXIT_INSN(), |