diff options
Diffstat (limited to 'lib')
| -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(), |
