selftests/bpf: Migrate sendmsg6 v4 mapped address tests
Migrate test case from bpf/test_sock_addr.c ensuring that sendmsg returns -ENOTSUPP when sending to an IPv4-mapped IPv6 address to prog_tests/sock_addr.c. Signed-off-by: Jordan Rife <jrife@google.com> Link: https://lore.kernel.org/r/20240510190246.3247730-9-jrife@google.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
committed by
Alexei Starovoitov
parent
f46a10483b
commit
54462e8452
@@ -447,6 +447,7 @@ BPF_SKEL_FUNCS(sendmsg4_prog, sendmsg_v4_deny_prog);
|
||||
BPF_SKEL_FUNCS(sendmsg6_prog, sendmsg_v6_prog);
|
||||
BPF_SKEL_FUNCS(sendmsg6_prog, sendmsg_v6_deny_prog);
|
||||
BPF_SKEL_FUNCS(sendmsg6_prog, sendmsg_v6_preserve_dst_prog);
|
||||
BPF_SKEL_FUNCS(sendmsg6_prog, sendmsg_v6_v4mapped_prog);
|
||||
BPF_SKEL_FUNCS(sendmsg_unix_prog, sendmsg_unix_prog);
|
||||
BPF_SKEL_FUNCS(recvmsg4_prog, recvmsg4_prog);
|
||||
BPF_SKEL_FUNCS(recvmsg6_prog, recvmsg6_prog);
|
||||
@@ -832,6 +833,22 @@ static struct sock_addr_test tests[] = {
|
||||
SRC6_REWRITE_IP,
|
||||
SYSCALL_EPERM,
|
||||
},
|
||||
{
|
||||
SOCK_ADDR_TEST_SENDMSG,
|
||||
"sendmsg6: sendmsg IPv4-mapped IPv6 (dgram)",
|
||||
sendmsg_v6_v4mapped_prog_load,
|
||||
sendmsg_v6_v4mapped_prog_destroy,
|
||||
BPF_CGROUP_UDP6_SENDMSG,
|
||||
&user_ops,
|
||||
AF_INET6,
|
||||
SOCK_DGRAM,
|
||||
SERV6_IP,
|
||||
SERV6_PORT,
|
||||
SERV6_REWRITE_IP,
|
||||
SERV6_REWRITE_PORT,
|
||||
SRC6_REWRITE_IP,
|
||||
SYSCALL_ENOTSUPP,
|
||||
},
|
||||
{
|
||||
SOCK_ADDR_TEST_SENDMSG,
|
||||
"sendmsg_unix: sendmsg (dgram)",
|
||||
|
||||
@@ -20,6 +20,11 @@
|
||||
#define DST_REWRITE_IP6_2 0
|
||||
#define DST_REWRITE_IP6_3 1
|
||||
|
||||
#define DST_REWRITE_IP6_V4_MAPPED_0 0
|
||||
#define DST_REWRITE_IP6_V4_MAPPED_1 0
|
||||
#define DST_REWRITE_IP6_V4_MAPPED_2 0x0000FFFF
|
||||
#define DST_REWRITE_IP6_V4_MAPPED_3 0xc0a80004 // 192.168.0.4
|
||||
|
||||
#define DST_REWRITE_PORT6 6666
|
||||
|
||||
SEC("cgroup/sendmsg6")
|
||||
@@ -59,6 +64,26 @@ int sendmsg_v6_prog(struct bpf_sock_addr *ctx)
|
||||
return 1;
|
||||
}
|
||||
|
||||
SEC("cgroup/sendmsg6")
|
||||
int sendmsg_v6_v4mapped_prog(struct bpf_sock_addr *ctx)
|
||||
{
|
||||
/* Rewrite source. */
|
||||
ctx->msg_src_ip6[0] = bpf_htonl(SRC_REWRITE_IP6_0);
|
||||
ctx->msg_src_ip6[1] = bpf_htonl(SRC_REWRITE_IP6_1);
|
||||
ctx->msg_src_ip6[2] = bpf_htonl(SRC_REWRITE_IP6_2);
|
||||
ctx->msg_src_ip6[3] = bpf_htonl(SRC_REWRITE_IP6_3);
|
||||
|
||||
/* Rewrite destination. */
|
||||
ctx->user_ip6[0] = bpf_htonl(DST_REWRITE_IP6_V4_MAPPED_0);
|
||||
ctx->user_ip6[1] = bpf_htonl(DST_REWRITE_IP6_V4_MAPPED_1);
|
||||
ctx->user_ip6[2] = bpf_htonl(DST_REWRITE_IP6_V4_MAPPED_2);
|
||||
ctx->user_ip6[3] = bpf_htonl(DST_REWRITE_IP6_V4_MAPPED_3);
|
||||
|
||||
ctx->user_port = bpf_htons(DST_REWRITE_PORT6);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
SEC("cgroup/sendmsg6")
|
||||
int sendmsg_v6_preserve_dst_prog(struct bpf_sock_addr *ctx)
|
||||
{
|
||||
|
||||
@@ -94,7 +94,6 @@ static int connect4_prog_load(const struct sock_addr_test *test);
|
||||
static int connect6_prog_load(const struct sock_addr_test *test);
|
||||
static int sendmsg4_rw_asm_prog_load(const struct sock_addr_test *test);
|
||||
static int sendmsg6_rw_asm_prog_load(const struct sock_addr_test *test);
|
||||
static int sendmsg6_rw_v4mapped_prog_load(const struct sock_addr_test *test);
|
||||
static int sendmsg6_rw_wildcard_prog_load(const struct sock_addr_test *test);
|
||||
|
||||
static struct sock_addr_test tests[] = {
|
||||
@@ -299,20 +298,6 @@ static struct sock_addr_test tests[] = {
|
||||
SRC6_REWRITE_IP,
|
||||
SUCCESS,
|
||||
},
|
||||
{
|
||||
"sendmsg6: IPv4-mapped IPv6",
|
||||
sendmsg6_rw_v4mapped_prog_load,
|
||||
BPF_CGROUP_UDP6_SENDMSG,
|
||||
BPF_CGROUP_UDP6_SENDMSG,
|
||||
AF_INET6,
|
||||
SOCK_DGRAM,
|
||||
SERV6_IP,
|
||||
SERV6_PORT,
|
||||
SERV6_REWRITE_IP,
|
||||
SERV6_REWRITE_PORT,
|
||||
SRC6_REWRITE_IP,
|
||||
SYSCALL_ENOTSUPP,
|
||||
},
|
||||
{
|
||||
"sendmsg6: set dst IP = [::] (BSD'ism)",
|
||||
sendmsg6_rw_wildcard_prog_load,
|
||||
@@ -512,11 +497,6 @@ static int sendmsg6_rw_asm_prog_load(const struct sock_addr_test *test)
|
||||
return sendmsg6_rw_dst_asm_prog_load(test, SERV6_REWRITE_IP);
|
||||
}
|
||||
|
||||
static int sendmsg6_rw_v4mapped_prog_load(const struct sock_addr_test *test)
|
||||
{
|
||||
return sendmsg6_rw_dst_asm_prog_load(test, SERV6_V4MAPPED_IP);
|
||||
}
|
||||
|
||||
static int sendmsg6_rw_wildcard_prog_load(const struct sock_addr_test *test)
|
||||
{
|
||||
return sendmsg6_rw_dst_asm_prog_load(test, WILDCARD6_IP);
|
||||
|
||||
Reference in New Issue
Block a user