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

selftests/bpf: Migrate wildcard destination rewrite test

Migrate test case from bpf/test_sock_addr.c ensuring that sendmsg
respects when sendmsg6 hooks rewrite the destination IP with the IPv6
wildcard IP, [::].

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

authored by

Jordan Rife and committed by
Alexei Starovoitov
8eaf8056 54462e84

+37 -20
+17
tools/testing/selftests/bpf/prog_tests/sock_addr.c
··· 448 448 BPF_SKEL_FUNCS(sendmsg6_prog, sendmsg_v6_deny_prog); 449 449 BPF_SKEL_FUNCS(sendmsg6_prog, sendmsg_v6_preserve_dst_prog); 450 450 BPF_SKEL_FUNCS(sendmsg6_prog, sendmsg_v6_v4mapped_prog); 451 + BPF_SKEL_FUNCS(sendmsg6_prog, sendmsg_v6_wildcard_prog); 451 452 BPF_SKEL_FUNCS(sendmsg_unix_prog, sendmsg_unix_prog); 452 453 BPF_SKEL_FUNCS(recvmsg4_prog, recvmsg4_prog); 453 454 BPF_SKEL_FUNCS(recvmsg6_prog, recvmsg6_prog); ··· 849 848 SERV6_REWRITE_PORT, 850 849 SRC6_REWRITE_IP, 851 850 SYSCALL_ENOTSUPP, 851 + }, 852 + { 853 + SOCK_ADDR_TEST_SENDMSG, 854 + "sendmsg6: sendmsg dst IP = [::] (BSD'ism) (dgram)", 855 + sendmsg_v6_wildcard_prog_load, 856 + sendmsg_v6_wildcard_prog_destroy, 857 + BPF_CGROUP_UDP6_SENDMSG, 858 + &user_ops, 859 + AF_INET6, 860 + SOCK_DGRAM, 861 + SERV6_IP, 862 + SERV6_PORT, 863 + SERV6_REWRITE_IP, 864 + SERV6_REWRITE_PORT, 865 + SRC6_REWRITE_IP, 866 + SUCCESS, 852 867 }, 853 868 { 854 869 SOCK_ADDR_TEST_SENDMSG,
+20
tools/testing/selftests/bpf/progs/sendmsg6_prog.c
··· 85 85 } 86 86 87 87 SEC("cgroup/sendmsg6") 88 + int sendmsg_v6_wildcard_prog(struct bpf_sock_addr *ctx) 89 + { 90 + /* Rewrite source. */ 91 + ctx->msg_src_ip6[0] = bpf_htonl(SRC_REWRITE_IP6_0); 92 + ctx->msg_src_ip6[1] = bpf_htonl(SRC_REWRITE_IP6_1); 93 + ctx->msg_src_ip6[2] = bpf_htonl(SRC_REWRITE_IP6_2); 94 + ctx->msg_src_ip6[3] = bpf_htonl(SRC_REWRITE_IP6_3); 95 + 96 + /* Rewrite destination. */ 97 + ctx->user_ip6[0] = bpf_htonl(0); 98 + ctx->user_ip6[1] = bpf_htonl(0); 99 + ctx->user_ip6[2] = bpf_htonl(0); 100 + ctx->user_ip6[3] = bpf_htonl(0); 101 + 102 + ctx->user_port = bpf_htons(DST_REWRITE_PORT6); 103 + 104 + return 1; 105 + } 106 + 107 + SEC("cgroup/sendmsg6") 88 108 int sendmsg_v6_preserve_dst_prog(struct bpf_sock_addr *ctx) 89 109 { 90 110 return 1;
-20
tools/testing/selftests/bpf/test_sock_addr.c
··· 94 94 static int connect6_prog_load(const struct sock_addr_test *test); 95 95 static int sendmsg4_rw_asm_prog_load(const struct sock_addr_test *test); 96 96 static int sendmsg6_rw_asm_prog_load(const struct sock_addr_test *test); 97 - static int sendmsg6_rw_wildcard_prog_load(const struct sock_addr_test *test); 98 97 99 98 static struct sock_addr_test tests[] = { 100 99 /* bind */ ··· 297 298 SRC6_REWRITE_IP, 298 299 SUCCESS, 299 300 }, 300 - { 301 - "sendmsg6: set dst IP = [::] (BSD'ism)", 302 - sendmsg6_rw_wildcard_prog_load, 303 - BPF_CGROUP_UDP6_SENDMSG, 304 - BPF_CGROUP_UDP6_SENDMSG, 305 - AF_INET6, 306 - SOCK_DGRAM, 307 - SERV6_IP, 308 - SERV6_PORT, 309 - SERV6_REWRITE_IP, 310 - SERV6_REWRITE_PORT, 311 - SRC6_REWRITE_IP, 312 - SUCCESS, 313 - }, 314 301 }; 315 302 316 303 static int load_insns(const struct sock_addr_test *test, ··· 480 495 static int sendmsg6_rw_asm_prog_load(const struct sock_addr_test *test) 481 496 { 482 497 return sendmsg6_rw_dst_asm_prog_load(test, SERV6_REWRITE_IP); 483 - } 484 - 485 - static int sendmsg6_rw_wildcard_prog_load(const struct sock_addr_test *test) 486 - { 487 - return sendmsg6_rw_dst_asm_prog_load(test, WILDCARD6_IP); 488 498 } 489 499 490 500 static int cmp_addr(const struct sockaddr_storage *addr1,