aboutsummaryrefslogtreecommitdiffstats
path: root/lib/test_bpf.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/test_bpf.c')
-rw-r--r--lib/test_bpf.c229
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(),