Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

selftests/bpf: Handle LOAD_REJECT test cases

In preparation to move test cases from bpf/test_sock_addr.c that expect
LOAD_REJECT, this patch adds expected_attach_type and extends load_fn to
accept an expected attach type and a flag indicating whether or not
rejection is expected.

Signed-off-by: Jordan Rife <jrife@google.com>
Link: https://lore.kernel.org/r/20240510190246.3247730-4-jrife@google.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>

authored by

Jordan Rife and committed by
Alexei Starovoitov
5eff48f3 86b65c6d

+98 -5
+98 -5
tools/testing/selftests/bpf/prog_tests/sock_addr.c
··· 52 52 SOCK_ADDR_TEST_GETPEERNAME, 53 53 }; 54 54 55 - typedef void *(*load_fn)(int cgroup_fd); 55 + typedef void *(*load_fn)(int cgroup_fd, 56 + enum bpf_attach_type attach_type, 57 + bool expect_reject); 56 58 typedef void (*destroy_fn)(void *skel); 57 59 58 60 static int cmp_addr(const struct sockaddr_storage *addr1, socklen_t addr1_len, ··· 345 343 /* BPF prog properties */ 346 344 load_fn loadfn; 347 345 destroy_fn destroyfn; 346 + enum bpf_attach_type attach_type; 348 347 /* Socket operations */ 349 348 struct sock_ops *ops; 350 349 /* Socket properties */ ··· 357 354 const char *expected_addr; 358 355 unsigned short expected_port; 359 356 const char *expected_src_addr; 357 + /* Expected test result */ 358 + enum { 359 + LOAD_REJECT, 360 + ATTACH_REJECT, 361 + SYSCALL_EPERM, 362 + SYSCALL_ENOTSUPP, 363 + SUCCESS, 364 + } expected_result; 360 365 }; 361 366 362 367 #define BPF_SKEL_FUNCS(skel_name, prog_name) \ 363 - static void *prog_name##_load(int cgroup_fd) \ 368 + static void *prog_name##_load(int cgroup_fd, \ 369 + enum bpf_attach_type attach_type, \ 370 + bool expect_reject) \ 364 371 { \ 365 - struct skel_name *skel; \ 366 - skel = skel_name##__open_and_load(); \ 372 + struct skel_name *skel = skel_name##__open(); \ 367 373 if (!ASSERT_OK_PTR(skel, "skel_open")) \ 374 + goto cleanup; \ 375 + if (!ASSERT_OK(bpf_program__set_expected_attach_type(skel->progs.prog_name, \ 376 + attach_type), \ 377 + "set_expected_attach_type")) \ 378 + goto cleanup; \ 379 + if (skel_name##__load(skel)) { \ 380 + ASSERT_TRUE(expect_reject, "unexpected rejection"); \ 381 + goto cleanup; \ 382 + } \ 383 + if (!ASSERT_FALSE(expect_reject, "expected rejection")) \ 368 384 goto cleanup; \ 369 385 skel->links.prog_name = bpf_program__attach_cgroup( \ 370 386 skel->progs.prog_name, cgroup_fd); \ ··· 420 398 "bind4: bind (stream)", 421 399 bind_v4_prog_load, 422 400 bind_v4_prog_destroy, 401 + BPF_CGROUP_INET4_BIND, 423 402 &user_ops, 424 403 AF_INET, 425 404 SOCK_STREAM, ··· 429 406 SERV4_REWRITE_IP, 430 407 SERV4_REWRITE_PORT, 431 408 NULL, 409 + SUCCESS, 432 410 }, 433 411 { 434 412 SOCK_ADDR_TEST_BIND, 435 413 "bind4: bind (dgram)", 436 414 bind_v4_prog_load, 437 415 bind_v4_prog_destroy, 416 + BPF_CGROUP_INET4_BIND, 438 417 &user_ops, 439 418 AF_INET, 440 419 SOCK_DGRAM, ··· 445 420 SERV4_REWRITE_IP, 446 421 SERV4_REWRITE_PORT, 447 422 NULL, 423 + SUCCESS, 448 424 }, 449 425 { 450 426 SOCK_ADDR_TEST_BIND, 451 427 "bind6: bind (stream)", 452 428 bind_v6_prog_load, 453 429 bind_v6_prog_destroy, 430 + BPF_CGROUP_INET6_BIND, 454 431 &user_ops, 455 432 AF_INET6, 456 433 SOCK_STREAM, ··· 461 434 SERV6_REWRITE_IP, 462 435 SERV6_REWRITE_PORT, 463 436 NULL, 437 + SUCCESS, 464 438 }, 465 439 { 466 440 SOCK_ADDR_TEST_BIND, 467 441 "bind6: bind (dgram)", 468 442 bind_v6_prog_load, 469 443 bind_v6_prog_destroy, 444 + BPF_CGROUP_INET6_BIND, 470 445 &user_ops, 471 446 AF_INET6, 472 447 SOCK_DGRAM, ··· 477 448 SERV6_REWRITE_IP, 478 449 SERV6_REWRITE_PORT, 479 450 NULL, 451 + SUCCESS, 480 452 }, 481 453 482 454 /* bind - kernel calls */ ··· 486 456 "bind4: kernel_bind (stream)", 487 457 bind_v4_prog_load, 488 458 bind_v4_prog_destroy, 459 + BPF_CGROUP_INET4_BIND, 489 460 &kern_ops_sock_sendmsg, 490 461 AF_INET, 491 462 SOCK_STREAM, ··· 494 463 SERV4_PORT, 495 464 SERV4_REWRITE_IP, 496 465 SERV4_REWRITE_PORT, 466 + NULL, 467 + SUCCESS, 497 468 }, 498 469 { 499 470 SOCK_ADDR_TEST_BIND, 500 471 "bind4: kernel_bind (dgram)", 501 472 bind_v4_prog_load, 502 473 bind_v4_prog_destroy, 474 + BPF_CGROUP_INET4_BIND, 503 475 &kern_ops_sock_sendmsg, 504 476 AF_INET, 505 477 SOCK_DGRAM, ··· 510 476 SERV4_PORT, 511 477 SERV4_REWRITE_IP, 512 478 SERV4_REWRITE_PORT, 479 + NULL, 480 + SUCCESS, 513 481 }, 514 482 { 515 483 SOCK_ADDR_TEST_BIND, 516 484 "bind6: kernel_bind (stream)", 517 485 bind_v6_prog_load, 518 486 bind_v6_prog_destroy, 487 + BPF_CGROUP_INET6_BIND, 519 488 &kern_ops_sock_sendmsg, 520 489 AF_INET6, 521 490 SOCK_STREAM, ··· 526 489 SERV6_PORT, 527 490 SERV6_REWRITE_IP, 528 491 SERV6_REWRITE_PORT, 492 + NULL, 493 + SUCCESS, 529 494 }, 530 495 { 531 496 SOCK_ADDR_TEST_BIND, 532 497 "bind6: kernel_bind (dgram)", 533 498 bind_v6_prog_load, 534 499 bind_v6_prog_destroy, 500 + BPF_CGROUP_INET6_BIND, 535 501 &kern_ops_sock_sendmsg, 536 502 AF_INET6, 537 503 SOCK_DGRAM, ··· 542 502 SERV6_PORT, 543 503 SERV6_REWRITE_IP, 544 504 SERV6_REWRITE_PORT, 505 + NULL, 506 + SUCCESS, 545 507 }, 546 508 547 509 /* connect - system calls */ ··· 552 510 "connect4: connect (stream)", 553 511 connect_v4_prog_load, 554 512 connect_v4_prog_destroy, 513 + BPF_CGROUP_INET4_CONNECT, 555 514 &user_ops, 556 515 AF_INET, 557 516 SOCK_STREAM, ··· 561 518 SERV4_REWRITE_IP, 562 519 SERV4_REWRITE_PORT, 563 520 SRC4_REWRITE_IP, 521 + SUCCESS, 564 522 }, 565 523 { 566 524 SOCK_ADDR_TEST_CONNECT, 567 525 "connect4: connect (dgram)", 568 526 connect_v4_prog_load, 569 527 connect_v4_prog_destroy, 528 + BPF_CGROUP_INET4_CONNECT, 570 529 &user_ops, 571 530 AF_INET, 572 531 SOCK_DGRAM, ··· 577 532 SERV4_REWRITE_IP, 578 533 SERV4_REWRITE_PORT, 579 534 SRC4_REWRITE_IP, 535 + SUCCESS, 580 536 }, 581 537 { 582 538 SOCK_ADDR_TEST_CONNECT, 583 539 "connect6: connect (stream)", 584 540 connect_v6_prog_load, 585 541 connect_v6_prog_destroy, 542 + BPF_CGROUP_INET6_CONNECT, 586 543 &user_ops, 587 544 AF_INET6, 588 545 SOCK_STREAM, ··· 593 546 SERV6_REWRITE_IP, 594 547 SERV6_REWRITE_PORT, 595 548 SRC6_REWRITE_IP, 549 + SUCCESS, 596 550 }, 597 551 { 598 552 SOCK_ADDR_TEST_CONNECT, 599 553 "connect6: connect (dgram)", 600 554 connect_v6_prog_load, 601 555 connect_v6_prog_destroy, 556 + BPF_CGROUP_INET6_CONNECT, 602 557 &user_ops, 603 558 AF_INET6, 604 559 SOCK_DGRAM, ··· 609 560 SERV6_REWRITE_IP, 610 561 SERV6_REWRITE_PORT, 611 562 SRC6_REWRITE_IP, 563 + SUCCESS, 612 564 }, 613 565 { 614 566 SOCK_ADDR_TEST_CONNECT, 615 567 "connect_unix: connect (stream)", 616 568 connect_unix_prog_load, 617 569 connect_unix_prog_destroy, 570 + BPF_CGROUP_UNIX_CONNECT, 618 571 &user_ops, 619 572 AF_UNIX, 620 573 SOCK_STREAM, ··· 625 574 SERVUN_REWRITE_ADDRESS, 626 575 0, 627 576 NULL, 577 + SUCCESS, 628 578 }, 629 579 630 580 /* connect - kernel calls */ ··· 634 582 "connect4: kernel_connect (stream)", 635 583 connect_v4_prog_load, 636 584 connect_v4_prog_destroy, 585 + BPF_CGROUP_INET4_CONNECT, 637 586 &kern_ops_sock_sendmsg, 638 587 AF_INET, 639 588 SOCK_STREAM, ··· 643 590 SERV4_REWRITE_IP, 644 591 SERV4_REWRITE_PORT, 645 592 SRC4_REWRITE_IP, 593 + SUCCESS, 646 594 }, 647 595 { 648 596 SOCK_ADDR_TEST_CONNECT, 649 597 "connect4: kernel_connect (dgram)", 650 598 connect_v4_prog_load, 651 599 connect_v4_prog_destroy, 600 + BPF_CGROUP_INET4_CONNECT, 652 601 &kern_ops_sock_sendmsg, 653 602 AF_INET, 654 603 SOCK_DGRAM, ··· 659 604 SERV4_REWRITE_IP, 660 605 SERV4_REWRITE_PORT, 661 606 SRC4_REWRITE_IP, 607 + SUCCESS, 662 608 }, 663 609 { 664 610 SOCK_ADDR_TEST_CONNECT, 665 611 "connect6: kernel_connect (stream)", 666 612 connect_v6_prog_load, 667 613 connect_v6_prog_destroy, 614 + BPF_CGROUP_INET6_CONNECT, 668 615 &kern_ops_sock_sendmsg, 669 616 AF_INET6, 670 617 SOCK_STREAM, ··· 675 618 SERV6_REWRITE_IP, 676 619 SERV6_REWRITE_PORT, 677 620 SRC6_REWRITE_IP, 621 + SUCCESS, 678 622 }, 679 623 { 680 624 SOCK_ADDR_TEST_CONNECT, 681 625 "connect6: kernel_connect (dgram)", 682 626 connect_v6_prog_load, 683 627 connect_v6_prog_destroy, 628 + BPF_CGROUP_INET6_CONNECT, 684 629 &kern_ops_sock_sendmsg, 685 630 AF_INET6, 686 631 SOCK_DGRAM, ··· 691 632 SERV6_REWRITE_IP, 692 633 SERV6_REWRITE_PORT, 693 634 SRC6_REWRITE_IP, 635 + SUCCESS, 694 636 }, 695 637 { 696 638 SOCK_ADDR_TEST_CONNECT, 697 639 "connect_unix: kernel_connect (dgram)", 698 640 connect_unix_prog_load, 699 641 connect_unix_prog_destroy, 642 + BPF_CGROUP_UNIX_CONNECT, 700 643 &kern_ops_sock_sendmsg, 701 644 AF_UNIX, 702 645 SOCK_STREAM, ··· 707 646 SERVUN_REWRITE_ADDRESS, 708 647 0, 709 648 NULL, 649 + SUCCESS, 710 650 }, 711 651 712 652 /* sendmsg - system calls */ ··· 716 654 "sendmsg4: sendmsg (dgram)", 717 655 sendmsg_v4_prog_load, 718 656 sendmsg_v4_prog_destroy, 657 + BPF_CGROUP_UDP4_SENDMSG, 719 658 &user_ops, 720 659 AF_INET, 721 660 SOCK_DGRAM, ··· 725 662 SERV4_REWRITE_IP, 726 663 SERV4_REWRITE_PORT, 727 664 SRC4_REWRITE_IP, 665 + SUCCESS, 728 666 }, 729 667 { 730 668 SOCK_ADDR_TEST_SENDMSG, 731 669 "sendmsg6: sendmsg (dgram)", 732 670 sendmsg_v6_prog_load, 733 671 sendmsg_v6_prog_destroy, 672 + BPF_CGROUP_UDP6_SENDMSG, 734 673 &user_ops, 735 674 AF_INET6, 736 675 SOCK_DGRAM, ··· 741 676 SERV6_REWRITE_IP, 742 677 SERV6_REWRITE_PORT, 743 678 SRC6_REWRITE_IP, 679 + SUCCESS, 744 680 }, 745 681 { 746 682 SOCK_ADDR_TEST_SENDMSG, 747 683 "sendmsg_unix: sendmsg (dgram)", 748 684 sendmsg_unix_prog_load, 749 685 sendmsg_unix_prog_destroy, 686 + BPF_CGROUP_UNIX_SENDMSG, 750 687 &user_ops, 751 688 AF_UNIX, 752 689 SOCK_DGRAM, ··· 757 690 SERVUN_REWRITE_ADDRESS, 758 691 0, 759 692 NULL, 693 + SUCCESS, 760 694 }, 761 695 762 696 /* sendmsg - kernel calls (sock_sendmsg) */ ··· 766 698 "sendmsg4: sock_sendmsg (dgram)", 767 699 sendmsg_v4_prog_load, 768 700 sendmsg_v4_prog_destroy, 701 + BPF_CGROUP_UDP4_SENDMSG, 769 702 &kern_ops_sock_sendmsg, 770 703 AF_INET, 771 704 SOCK_DGRAM, ··· 775 706 SERV4_REWRITE_IP, 776 707 SERV4_REWRITE_PORT, 777 708 SRC4_REWRITE_IP, 709 + SUCCESS, 778 710 }, 779 711 { 780 712 SOCK_ADDR_TEST_SENDMSG, 781 713 "sendmsg6: sock_sendmsg (dgram)", 782 714 sendmsg_v6_prog_load, 783 715 sendmsg_v6_prog_destroy, 716 + BPF_CGROUP_UDP6_SENDMSG, 784 717 &kern_ops_sock_sendmsg, 785 718 AF_INET6, 786 719 SOCK_DGRAM, ··· 791 720 SERV6_REWRITE_IP, 792 721 SERV6_REWRITE_PORT, 793 722 SRC6_REWRITE_IP, 723 + SUCCESS, 794 724 }, 795 725 { 796 726 SOCK_ADDR_TEST_SENDMSG, 797 727 "sendmsg_unix: sock_sendmsg (dgram)", 798 728 sendmsg_unix_prog_load, 799 729 sendmsg_unix_prog_destroy, 730 + BPF_CGROUP_UNIX_SENDMSG, 800 731 &kern_ops_sock_sendmsg, 801 732 AF_UNIX, 802 733 SOCK_DGRAM, ··· 807 734 SERVUN_REWRITE_ADDRESS, 808 735 0, 809 736 NULL, 737 + SUCCESS, 810 738 }, 811 739 812 740 /* sendmsg - kernel calls (kernel_sendmsg) */ ··· 816 742 "sendmsg4: kernel_sendmsg (dgram)", 817 743 sendmsg_v4_prog_load, 818 744 sendmsg_v4_prog_destroy, 745 + BPF_CGROUP_UDP4_SENDMSG, 819 746 &kern_ops_kernel_sendmsg, 820 747 AF_INET, 821 748 SOCK_DGRAM, ··· 825 750 SERV4_REWRITE_IP, 826 751 SERV4_REWRITE_PORT, 827 752 SRC4_REWRITE_IP, 753 + SUCCESS, 828 754 }, 829 755 { 830 756 SOCK_ADDR_TEST_SENDMSG, 831 757 "sendmsg6: kernel_sendmsg (dgram)", 832 758 sendmsg_v6_prog_load, 833 759 sendmsg_v6_prog_destroy, 760 + BPF_CGROUP_UDP6_SENDMSG, 834 761 &kern_ops_kernel_sendmsg, 835 762 AF_INET6, 836 763 SOCK_DGRAM, ··· 841 764 SERV6_REWRITE_IP, 842 765 SERV6_REWRITE_PORT, 843 766 SRC6_REWRITE_IP, 767 + SUCCESS, 844 768 }, 845 769 { 846 770 SOCK_ADDR_TEST_SENDMSG, 847 771 "sendmsg_unix: sock_sendmsg (dgram)", 848 772 sendmsg_unix_prog_load, 849 773 sendmsg_unix_prog_destroy, 774 + BPF_CGROUP_UNIX_SENDMSG, 850 775 &kern_ops_kernel_sendmsg, 851 776 AF_UNIX, 852 777 SOCK_DGRAM, ··· 857 778 SERVUN_REWRITE_ADDRESS, 858 779 0, 859 780 NULL, 781 + SUCCESS, 860 782 }, 861 783 862 784 /* recvmsg - system calls */ ··· 866 786 "recvmsg4: recvfrom (dgram)", 867 787 recvmsg4_prog_load, 868 788 recvmsg4_prog_destroy, 789 + BPF_CGROUP_UDP4_RECVMSG, 869 790 &user_ops, 870 791 AF_INET, 871 792 SOCK_DGRAM, ··· 875 794 SERV4_REWRITE_IP, 876 795 SERV4_REWRITE_PORT, 877 796 SERV4_IP, 797 + SUCCESS, 878 798 }, 879 799 { 880 800 SOCK_ADDR_TEST_RECVMSG, 881 801 "recvmsg6: recvfrom (dgram)", 882 802 recvmsg6_prog_load, 883 803 recvmsg6_prog_destroy, 804 + BPF_CGROUP_UDP6_RECVMSG, 884 805 &user_ops, 885 806 AF_INET6, 886 807 SOCK_DGRAM, ··· 891 808 SERV6_REWRITE_IP, 892 809 SERV6_REWRITE_PORT, 893 810 SERV6_IP, 811 + SUCCESS, 894 812 }, 895 813 { 896 814 SOCK_ADDR_TEST_RECVMSG, 897 815 "recvmsg_unix: recvfrom (dgram)", 898 816 recvmsg_unix_prog_load, 899 817 recvmsg_unix_prog_destroy, 818 + BPF_CGROUP_UNIX_RECVMSG, 900 819 &user_ops, 901 820 AF_UNIX, 902 821 SOCK_DGRAM, ··· 907 822 SERVUN_REWRITE_ADDRESS, 908 823 0, 909 824 SERVUN_ADDRESS, 825 + SUCCESS, 910 826 }, 911 827 { 912 828 SOCK_ADDR_TEST_RECVMSG, 913 829 "recvmsg_unix: recvfrom (stream)", 914 830 recvmsg_unix_prog_load, 915 831 recvmsg_unix_prog_destroy, 832 + BPF_CGROUP_UNIX_RECVMSG, 916 833 &user_ops, 917 834 AF_UNIX, 918 835 SOCK_STREAM, ··· 923 836 SERVUN_REWRITE_ADDRESS, 924 837 0, 925 838 SERVUN_ADDRESS, 839 + SUCCESS, 926 840 }, 927 841 928 842 /* getsockname - system calls */ ··· 932 844 "getsockname_unix", 933 845 getsockname_unix_prog_load, 934 846 getsockname_unix_prog_destroy, 847 + BPF_CGROUP_UNIX_GETSOCKNAME, 935 848 &user_ops, 936 849 AF_UNIX, 937 850 SOCK_STREAM, ··· 941 852 SERVUN_REWRITE_ADDRESS, 942 853 0, 943 854 NULL, 855 + SUCCESS, 944 856 }, 945 857 946 858 /* getpeername - system calls */ ··· 950 860 "getpeername_unix", 951 861 getpeername_unix_prog_load, 952 862 getpeername_unix_prog_destroy, 863 + BPF_CGROUP_UNIX_GETPEERNAME, 953 864 &user_ops, 954 865 AF_UNIX, 955 866 SOCK_STREAM, ··· 959 868 SERVUN_REWRITE_ADDRESS, 960 869 0, 961 870 NULL, 871 + SUCCESS, 962 872 }, 963 873 }; 964 874 ··· 1341 1249 if (!test__start_subtest(test->name)) 1342 1250 continue; 1343 1251 1344 - skel = test->loadfn(cgroup_fd); 1252 + skel = test->loadfn(cgroup_fd, test->attach_type, 1253 + test->expected_result == LOAD_REJECT); 1345 1254 if (!skel) 1346 1255 continue; 1347 1256