mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 22:50:41 +00:00
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>
This commit is contained in:
parent
54462e8452
commit
8eaf8056a4
@ -448,6 +448,7 @@ 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(sendmsg6_prog, sendmsg_v6_wildcard_prog);
|
||||
BPF_SKEL_FUNCS(sendmsg_unix_prog, sendmsg_unix_prog);
|
||||
BPF_SKEL_FUNCS(recvmsg4_prog, recvmsg4_prog);
|
||||
BPF_SKEL_FUNCS(recvmsg6_prog, recvmsg6_prog);
|
||||
@ -849,6 +850,22 @@ static struct sock_addr_test tests[] = {
|
||||
SRC6_REWRITE_IP,
|
||||
SYSCALL_ENOTSUPP,
|
||||
},
|
||||
{
|
||||
SOCK_ADDR_TEST_SENDMSG,
|
||||
"sendmsg6: sendmsg dst IP = [::] (BSD'ism) (dgram)",
|
||||
sendmsg_v6_wildcard_prog_load,
|
||||
sendmsg_v6_wildcard_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,
|
||||
SUCCESS,
|
||||
},
|
||||
{
|
||||
SOCK_ADDR_TEST_SENDMSG,
|
||||
"sendmsg_unix: sendmsg (dgram)",
|
||||
|
@ -84,6 +84,26 @@ int sendmsg_v6_v4mapped_prog(struct bpf_sock_addr *ctx)
|
||||
return 1;
|
||||
}
|
||||
|
||||
SEC("cgroup/sendmsg6")
|
||||
int sendmsg_v6_wildcard_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(0);
|
||||
ctx->user_ip6[1] = bpf_htonl(0);
|
||||
ctx->user_ip6[2] = bpf_htonl(0);
|
||||
ctx->user_ip6[3] = bpf_htonl(0);
|
||||
|
||||
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_wildcard_prog_load(const struct sock_addr_test *test);
|
||||
|
||||
static struct sock_addr_test tests[] = {
|
||||
/* bind */
|
||||
@ -298,20 +297,6 @@ static struct sock_addr_test tests[] = {
|
||||
SRC6_REWRITE_IP,
|
||||
SUCCESS,
|
||||
},
|
||||
{
|
||||
"sendmsg6: set dst IP = [::] (BSD'ism)",
|
||||
sendmsg6_rw_wildcard_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,
|
||||
SUCCESS,
|
||||
},
|
||||
};
|
||||
|
||||
static int load_insns(const struct sock_addr_test *test,
|
||||
@ -497,11 +482,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_wildcard_prog_load(const struct sock_addr_test *test)
|
||||
{
|
||||
return sendmsg6_rw_dst_asm_prog_load(test, WILDCARD6_IP);
|
||||
}
|
||||
|
||||
static int cmp_addr(const struct sockaddr_storage *addr1,
|
||||
const struct sockaddr_storage *addr2, int cmp_port)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user