From patchwork Thu Jun 6 09:27:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Whitchurch via B4 Relay X-Patchwork-Id: 13688138 X-Patchwork-Delegate: bpf@iogearbox.net Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3AEE2153821; Thu, 6 Jun 2024 09:28:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717666083; cv=none; b=cGthl8DMGSTkoSJgfizd34cdUDapls+r/38uxoAvKLLrN0UAkBfiTrsjjGD8XEKXzbo9IqItJ+x1OJN08KP9RCOo9PNarcuKp4m8UAhj40s+Up+RGYMiDpjsWpHl7H2rspSzNyUUX6ZhYsIPz/BH7AKhmpZ/SbC3b6Rf7oZa3fk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717666083; c=relaxed/simple; bh=jTAuNzNjM4epWY5GlgPSmj6dPtkN7YNSyxEk0NTyXYM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=U2lalljdTx2MSGO71Q/jpqmIgavGF1JZtPrO6tUivh5s9Q4+4fyVEfIi6LTodGj26S0WgfnskD6CYbzPxkBtEYhSnIL2RpgFkYa4m7NSLS73zmCINAmJc7XW35VbBnAUFi5F5YTGsZtqlHSQm+lmKk3nOT/qOgz1/4M3EEeyO48= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=d/w/T9mZ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="d/w/T9mZ" Received: by smtp.kernel.org (Postfix) with ESMTPS id B48ECC4AF09; Thu, 6 Jun 2024 09:28:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717666082; bh=jTAuNzNjM4epWY5GlgPSmj6dPtkN7YNSyxEk0NTyXYM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=d/w/T9mZH5AQmUDKy/5lxs+S4speiX7oeOsY+qBNq7xEiSjN0+ZKTxcGe3guFn+Ef Bb6xtzv4gtLFmnr65erXY6bZGqAYEpgMbaJEs/zB3ugmzhDBI296mWCgQJAiCtSKAO cS3rAn0tiGJSmSxnBwlDnYownzQ2HfofnvyTT4HGqTuMYdGx2jAW3IJJ93868uJD+a 0ycIdOyd1/sBXMT7vVyP7iKuvP79kpT6GYfLIxwrD9bZOWx/LZTHuSZefz5HAMxtdY x+X1fI6NckPiQPR1Yr+pFaptZ/GnDY29woR6cYsjOQTQ3ltKB5FhV0OYJheEN6d3dl VzI3KAYTV1Syg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id A2010C27C5E; Thu, 6 Jun 2024 09:28:02 +0000 (UTC) From: Vincent Whitchurch via B4 Relay Date: Thu, 06 Jun 2024 11:27:52 +0200 Subject: [PATCH bpf-next 1/5] net: Add splice_read to prot Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240606-sockmap-splice-v1-1-4820a2ab14b5@datadoghq.com> References: <20240606-sockmap-splice-v1-0-4820a2ab14b5@datadoghq.com> In-Reply-To: <20240606-sockmap-splice-v1-0-4820a2ab14b5@datadoghq.com> To: John Fastabend , Jakub Sitnicki Cc: netdev@vger.kernel.org, bpf@vger.kernel.org, Vincent Whitchurch X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1717666080; l=4514; i=vincent.whitchurch@datadoghq.com; s=20240606; h=from:subject:message-id; bh=pZE9EinrT662tvpjfHQU0BTohLUXGfT+F7BHx9Lnoqo=; b=lOfhiCUyWo3Un4cwL+KUmsxVMiglFpZb9vwVMTXMx+9Zbp/6/FB9vaGLU5mfwycDkQu6ipguo 6oIhB1jWHdICgJfTdhUE3g9Ic+Iwc0S7BH5P28PgEsJJd+batWbQMU+ X-Developer-Key: i=vincent.whitchurch@datadoghq.com; a=ed25519; pk=GwUiPK96WuxbUAD4UjapyK7TOt+aX0EqABOZ/BOj+/M= X-Endpoint-Received: by B4 Relay for vincent.whitchurch@datadoghq.com/20240606 with auth_id=170 X-Original-From: Vincent Whitchurch Reply-To: vincent.whitchurch@datadoghq.com X-Patchwork-Delegate: bpf@iogearbox.net From: Vincent Whitchurch The TCP BPF code will need to override splice_read(), so add it to prot. Signed-off-by: Vincent Whitchurch --- include/net/inet_common.h | 3 +++ include/net/sock.h | 3 +++ net/ipv4/af_inet.c | 18 +++++++++++++++++- net/ipv4/tcp_ipv4.c | 1 + net/ipv6/af_inet6.c | 2 +- net/ipv6/tcp_ipv6.c | 1 + 6 files changed, 26 insertions(+), 2 deletions(-) diff --git a/include/net/inet_common.h b/include/net/inet_common.h index c17a6585d0b0..2a6480d0d575 100644 --- a/include/net/inet_common.h +++ b/include/net/inet_common.h @@ -35,6 +35,9 @@ void __inet_accept(struct socket *sock, struct socket *newsock, struct sock *newsk); int inet_send_prepare(struct sock *sk); int inet_sendmsg(struct socket *sock, struct msghdr *msg, size_t size); +ssize_t inet_splice_read(struct socket *sk, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags); void inet_splice_eof(struct socket *sock); int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, int flags); diff --git a/include/net/sock.h b/include/net/sock.h index 5f4d0629348f..a152552a64a5 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1238,6 +1238,9 @@ struct proto { size_t len); int (*recvmsg)(struct sock *sk, struct msghdr *msg, size_t len, int flags, int *addr_len); + ssize_t (*splice_read)(struct socket *sock, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags); void (*splice_eof)(struct socket *sock); int (*bind)(struct sock *sk, struct sockaddr *addr, int addr_len); diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index e03ba4a21c39..c9a23296ac82 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -870,6 +870,21 @@ void inet_splice_eof(struct socket *sock) } EXPORT_SYMBOL_GPL(inet_splice_eof); +ssize_t inet_splice_read(struct socket *sock, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags) +{ + const struct proto *prot; + struct sock *sk = sock->sk; + + prot = READ_ONCE(sk->sk_prot); + if (prot->splice_read) + return prot->splice_read(sock, ppos, pipe, len, flags); + + return -EINVAL; +} +EXPORT_SYMBOL_GPL(inet_splice_read); + INDIRECT_CALLABLE_DECLARE(int udp_recvmsg(struct sock *, struct msghdr *, size_t, int, int *)); int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, @@ -1073,7 +1088,7 @@ const struct proto_ops inet_stream_ops = { .mmap = tcp_mmap, #endif .splice_eof = inet_splice_eof, - .splice_read = tcp_splice_read, + .splice_read = inet_splice_read, .set_peek_off = sk_set_peek_off, .read_sock = tcp_read_sock, .read_skb = tcp_read_skb, @@ -1107,6 +1122,7 @@ const struct proto_ops inet_dgram_ops = { .recvmsg = inet_recvmsg, .mmap = sock_no_mmap, .splice_eof = inet_splice_eof, + .splice_read = inet_splice_read, .set_peek_off = udp_set_peek_off, #ifdef CONFIG_COMPAT .compat_ioctl = inet_compat_ioctl, diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 8f70b8d1d1e5..c9715d4be30d 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -3343,6 +3343,7 @@ struct proto tcp_prot = { .keepalive = tcp_set_keepalive, .recvmsg = tcp_recvmsg, .sendmsg = tcp_sendmsg, + .splice_read = tcp_splice_read, .splice_eof = tcp_splice_eof, .backlog_rcv = tcp_v4_do_rcv, .release_cb = tcp_release_cb, diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index 8041dc181bd4..c41aef88ae8b 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -707,7 +707,7 @@ const struct proto_ops inet6_stream_ops = { #endif .splice_eof = inet_splice_eof, .sendmsg_locked = tcp_sendmsg_locked, - .splice_read = tcp_splice_read, + .splice_read = inet_splice_read, .read_sock = tcp_read_sock, .read_skb = tcp_read_skb, .peek_len = tcp_peek_len, diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 750aa681779c..45198bac1bc9 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -2340,6 +2340,7 @@ struct proto tcpv6_prot = { .keepalive = tcp_set_keepalive, .recvmsg = tcp_recvmsg, .sendmsg = tcp_sendmsg, + .splice_read = tcp_splice_read, .splice_eof = tcp_splice_eof, .backlog_rcv = tcp_v6_do_rcv, .release_cb = tcp_release_cb, From patchwork Thu Jun 6 09:27:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Whitchurch via B4 Relay X-Patchwork-Id: 13688135 X-Patchwork-Delegate: bpf@iogearbox.net Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E14A315357D; Thu, 6 Jun 2024 09:28:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717666083; cv=none; b=MqW0mvYgPA6ENggmB43Y9MS222Bot3lM4sZz6kzIzbqPjQExJVmgf/L07sILLqi6Mw88MkDsL6W/3vya/D1va/fYBXTVy8InWfZ9E03ElGge/WfKjaKmZUQAyZIwbJ+CPpSJ8Q4/4TjehMVVXcCCaxQZ4MPimcYJwcz1F2WtQWQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717666083; c=relaxed/simple; bh=NTLo/DeCQrzRkSDk9d2g9xUC7MUum/PNEd2yE6X68rY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qdZuAAK5VIG256CaoiyW8giqPmDE0HC0iNJLnJ/zuG2T0x9vfEzxmIpxMrLrigYAvEWBbavdz8xvBCBzT811v5i27aXwZMd0+RTKhD5t94lVLjomMxBcWstShFMb+6wOfwGPTB3+e/UGodj258G65uemtoQheN1h/ryA6+lUVXY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=STg92nVd; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="STg92nVd" Received: by smtp.kernel.org (Postfix) with ESMTPS id C0457C4AF48; Thu, 6 Jun 2024 09:28:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717666082; bh=NTLo/DeCQrzRkSDk9d2g9xUC7MUum/PNEd2yE6X68rY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=STg92nVd11OLwHySKA8nDsZ82krGrS0vJiUcjVYIV20AfrZtdJ8oIfB7cLnCoP7cP iEXz56sMbSljR6B04u1/TuzopyB3abTC/QLP6IixD70KgM315duZyXwS6WxcgFXloD QKJwAhfv4jP0BoYNkx5e+mcea6rUUlJfN8Cr23wSU16CH68V9tujF7xQYmE2vc/e/C psQFeQ49682FOmScmB9adgJGqXMdwx7vTQyTIo4pC0US9Bb44fs5V9q7FTnlexaM7/ eRnVEzhqBT4qVlCjUgJnC1DTw/lochwOJ96bGK5b2tdU5IV+mFhkCczZBCLby+kHL+ bPPn0fuUaEgjg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id B31C4C27C65; Thu, 6 Jun 2024 09:28:02 +0000 (UTC) From: Vincent Whitchurch via B4 Relay Date: Thu, 06 Jun 2024 11:27:53 +0200 Subject: [PATCH bpf-next 2/5] tcp_bpf: Fix reading with splice(2) Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240606-sockmap-splice-v1-2-4820a2ab14b5@datadoghq.com> References: <20240606-sockmap-splice-v1-0-4820a2ab14b5@datadoghq.com> In-Reply-To: <20240606-sockmap-splice-v1-0-4820a2ab14b5@datadoghq.com> To: John Fastabend , Jakub Sitnicki Cc: netdev@vger.kernel.org, bpf@vger.kernel.org, Vincent Whitchurch X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1717666080; l=2078; i=vincent.whitchurch@datadoghq.com; s=20240606; h=from:subject:message-id; bh=5PmgjmTWmIzMNFgYReeAdud4lLNptj4DS+QjXHC8+WA=; b=2u2whfWpWnMmKOgp3FMBDdS8cHVHB/yT0iLHNlIlhWwau7LT5upeZUbJwyjeMQD0FUHbqZojE wbi4DLbVaqNAcllN0lqZaJTysCj94AbTHEGkd4/8ezpIfR/vT7Z/3Zl X-Developer-Key: i=vincent.whitchurch@datadoghq.com; a=ed25519; pk=GwUiPK96WuxbUAD4UjapyK7TOt+aX0EqABOZ/BOj+/M= X-Endpoint-Received: by B4 Relay for vincent.whitchurch@datadoghq.com/20240606 with auth_id=170 X-Original-From: Vincent Whitchurch Reply-To: vincent.whitchurch@datadoghq.com X-Patchwork-Delegate: bpf@iogearbox.net From: Vincent Whitchurch If a socket is added to a sockmap with a verdict program which returns SK_PASS, splice(2) is not able to read from the socket. The verdict code removes skbs from the receive queue, checks them using the bpf program, and then re-queues them onto a separate queue (psock->ingress_msg). The sockmap code modifies the TCP recvmsg hook to check this second queue also so that works. But the splice_read hooks is not modified and the default tcp_read_splice() only reads the normal receive queue so it never sees the skbs which have been re-queued. Fix it by using copy_splice_read() when replacing the proto for the sockmap. This could eventually be replaced with a more efficient custom version. Signed-off-by: Vincent Whitchurch --- net/ipv4/tcp_bpf.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/net/ipv4/tcp_bpf.c b/net/ipv4/tcp_bpf.c index 53b0d62fd2c2..b7c110dedd35 100644 --- a/net/ipv4/tcp_bpf.c +++ b/net/ipv4/tcp_bpf.c @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -378,6 +379,13 @@ static int tcp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, return ret; } +static ssize_t tcp_bpf_splice_read(struct socket *sock, loff_t *ppos, + struct pipe_inode_info *pipe, size_t len, + unsigned int flags) +{ + return copy_splice_read(sock->file, ppos, pipe, len, flags); +} + static int tcp_bpf_send_verdict(struct sock *sk, struct sk_psock *psock, struct sk_msg *msg, int *copied, int flags) { @@ -605,6 +613,7 @@ static void tcp_bpf_rebuild_protos(struct proto prot[TCP_BPF_NUM_CFGS], prot[TCP_BPF_BASE].destroy = sock_map_destroy; prot[TCP_BPF_BASE].close = sock_map_close; prot[TCP_BPF_BASE].recvmsg = tcp_bpf_recvmsg; + prot[TCP_BPF_BASE].splice_read = tcp_bpf_splice_read; prot[TCP_BPF_BASE].sock_is_readable = sk_msg_is_readable; prot[TCP_BPF_TX] = prot[TCP_BPF_BASE]; From patchwork Thu Jun 6 09:27:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Whitchurch via B4 Relay X-Patchwork-Id: 13688137 X-Patchwork-Delegate: bpf@iogearbox.net Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3AEA115381F; Thu, 6 Jun 2024 09:28:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717666083; cv=none; b=sjYdX1EKry1/huwxYV87wAyjdMcgQfQCDfU1L5FYQPmJobiv3VDs0SyMukqWz6cB5wmq7fo1cEWH9Kt+P855CGSMkVUsYgJyjjivDDWnOsvCiKrwc2eA9JIltDUWW2DiRgRyNlfZjh74buRDWHTwYz5V5HMNKa0uxDtKvM8BydY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717666083; c=relaxed/simple; bh=ZnCu5TajAH5LyP1DnwsqQ7xn4FH1tdoSHV6nygQazWc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DLvwYa6sOM5hyBbAb0sXzPJOiXITPOcorWBMyvLlDcESS5ZF3JtOXnQvVq6UUZmR8VqvA9ZOMw4DIzlV2qVigMF3M2w/okkiuN0jUih6/dd/nDQluJAxIRo7sb4t2858JRfvdRY1l8RLOcS7qFVFZrS3DpVTxjJBGnml7tP9QEY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MXzy/eDR; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MXzy/eDR" Received: by smtp.kernel.org (Postfix) with ESMTPS id D54E4C4AF0B; Thu, 6 Jun 2024 09:28:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717666082; bh=ZnCu5TajAH5LyP1DnwsqQ7xn4FH1tdoSHV6nygQazWc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=MXzy/eDRHazjZ5/rqUiAbvlldabqfqNc2YA8Z8I+egAkBBIgpvpZT6drl6u2se9EX +5JLpeHEwD3f6n6dRfsOiN9fJiA+c2Wvl7npz/nlxUTEhTAes43glxArxlyYH7GfK9 3qRQsxkubYh6n+EkdVsAP8MwVCq5LXIG3QBQ9QJyvlSpCxe5fnRNaoRPqmhGxgr3gO f05QcOYTYKZxrKkV2NxPaqPYjsjbzqIdo9Mp6H9CXvwhKqyX7jYKs1ACRpfM92pYgN 1oE8gaJEwcAzmWcsKiVBuxTvcRHYCp35kGKmx1FKqV+bCyZwgiSxhk5iOhPeye2AHF vUrQ8jvq+Furg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id C3B0DC27C6D; Thu, 6 Jun 2024 09:28:02 +0000 (UTC) From: Vincent Whitchurch via B4 Relay Date: Thu, 06 Jun 2024 11:27:54 +0200 Subject: [PATCH bpf-next 3/5] selftests/bpf: sockmap: Exit with error on failure Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240606-sockmap-splice-v1-3-4820a2ab14b5@datadoghq.com> References: <20240606-sockmap-splice-v1-0-4820a2ab14b5@datadoghq.com> In-Reply-To: <20240606-sockmap-splice-v1-0-4820a2ab14b5@datadoghq.com> To: John Fastabend , Jakub Sitnicki Cc: netdev@vger.kernel.org, bpf@vger.kernel.org, Vincent Whitchurch X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1717666080; l=739; i=vincent.whitchurch@datadoghq.com; s=20240606; h=from:subject:message-id; bh=s+cGvRIItR2T1BSyPd1aAjKIAS5wEiDTK0IA+jXP+Lc=; b=v+BA4IwBGIyiVcfjNeL6acPzZDr2tvNeA1MJskBYLiNAd04pwDg4drD5MTBtzX0IalFB66io6 eh+dTuYoP5yCXyu2MG2WdfLo2IlmVGRV1U9mRx9l+paLqlIozs4uobi X-Developer-Key: i=vincent.whitchurch@datadoghq.com; a=ed25519; pk=GwUiPK96WuxbUAD4UjapyK7TOt+aX0EqABOZ/BOj+/M= X-Endpoint-Received: by B4 Relay for vincent.whitchurch@datadoghq.com/20240606 with auth_id=170 X-Original-From: Vincent Whitchurch Reply-To: vincent.whitchurch@datadoghq.com X-Patchwork-Delegate: bpf@iogearbox.net From: Vincent Whitchurch If any tests failed, exit the program with a non-zero error code. Signed-off-by: Vincent Whitchurch --- tools/testing/selftests/bpf/test_sockmap.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/bpf/test_sockmap.c b/tools/testing/selftests/bpf/test_sockmap.c index 9cba4ec844a5..ab7e169f5afa 100644 --- a/tools/testing/selftests/bpf/test_sockmap.c +++ b/tools/testing/selftests/bpf/test_sockmap.c @@ -2079,7 +2079,9 @@ int main(int argc, char **argv) close(cg_fd); if (cg_created) cleanup_cgroup_environment(); - return err; + if (err) + return err; + return failed ? 1 : 0; } void running_handler(int a) From patchwork Thu Jun 6 09:27:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Whitchurch via B4 Relay X-Patchwork-Id: 13688139 X-Patchwork-Delegate: bpf@iogearbox.net Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 405F5153824; Thu, 6 Jun 2024 09:28:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717666083; cv=none; b=SC4U1rhbsQ/684Qu71/AX4/UjnG1bRRgQzpalnJTk0ikrE43pJY2mO8HFBmacb+4azI/cPe3CIwfIpA+vjtdD4QWFvN2uQfOVZlKV1th5AdPpzpF3+AHxOeIMFcMGC07HJf4/MH8cj5VThFBGNVs8i3q7NCVo4lVDe9iUyODdh0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717666083; c=relaxed/simple; bh=5cIo0LhZe3qW4KnCWS9hXU2YJ2ZAuBeZ0XTzpw/hIzk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MQdXVpljxAOCOUHelZHRWfFUyC5a57VsihXiYhY+HNfuhVHFv3zZx3n7RAdIJD+ODH20PXcxyWCBZ/vYoEIHElXakc2dGkBBFuievw4MC31JOiZgGA2aW2ej/umKt5mm1cV2Bc2gSYGI3UgRhYHOEF+lLH0acGhx4FY5+D1iG7U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Ntq0LUnu; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Ntq0LUnu" Received: by smtp.kernel.org (Postfix) with ESMTPS id DF05AC4AF67; Thu, 6 Jun 2024 09:28:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717666082; bh=5cIo0LhZe3qW4KnCWS9hXU2YJ2ZAuBeZ0XTzpw/hIzk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=Ntq0LUnuaHTzJvKecgC4VIPJtvLL6BnJpOdiJ6C8UvLq6bQL8fwxXw1JU4F64S9iB m5DypaOxEU9eE+vDqXPZv64kYj51G0xyKZrmPVggAnykLm016xbxXw4DN/oPLb1G3B i7PHv8RIC7YRloqNY3S+fagNRHGNnAwHmN9paoGdNIsU1zZIDOL8qL1HrgnSEefLlj ZRTVz8l/20BulhnlMI5hQmNzBbt4aeXy+aYHCRzqA0SyrGe7Sr2Lq5NNkqiTQfk3PM vBWzFR75zT2GS66ha05AzvlCKzo1bR6sDENXk65hLoEpqD+7Piu4/OM3NMHhE9p5JZ OAIY/Je4CYWBg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id D7401C27C5E; Thu, 6 Jun 2024 09:28:02 +0000 (UTC) From: Vincent Whitchurch via B4 Relay Date: Thu, 06 Jun 2024 11:27:55 +0200 Subject: [PATCH bpf-next 4/5] selftests/bpf: sockmap: Allow SK_PASS in verdict Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240606-sockmap-splice-v1-4-4820a2ab14b5@datadoghq.com> References: <20240606-sockmap-splice-v1-0-4820a2ab14b5@datadoghq.com> In-Reply-To: <20240606-sockmap-splice-v1-0-4820a2ab14b5@datadoghq.com> To: John Fastabend , Jakub Sitnicki Cc: netdev@vger.kernel.org, bpf@vger.kernel.org, Vincent Whitchurch X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1717666080; l=2645; i=vincent.whitchurch@datadoghq.com; s=20240606; h=from:subject:message-id; bh=9C8FQo5IAJEB0CbCQagfo20n2t3AYZrxNI2oWgYOYkQ=; b=z7WpbmR3uI95n3ar81qghGJ3w86yNIeiFMShtDHN9d2hqvhnicrauoPo6dzdeWBsFtutMLeZg YZJfagOZsNlATWe06ljeA6kJH1MPdNeC+4vs5VTasJHZPPIati9nTvD X-Developer-Key: i=vincent.whitchurch@datadoghq.com; a=ed25519; pk=GwUiPK96WuxbUAD4UjapyK7TOt+aX0EqABOZ/BOj+/M= X-Endpoint-Received: by B4 Relay for vincent.whitchurch@datadoghq.com/20240606 with auth_id=170 X-Original-From: Vincent Whitchurch Reply-To: vincent.whitchurch@datadoghq.com X-Patchwork-Delegate: bpf@iogearbox.net From: Vincent Whitchurch Add an option to always return SK_PASS in the verdict callback instead of redirecting the skb. This allows testing cases which are not covered by the test program as of now. Signed-off-by: Vincent Whitchurch --- tools/testing/selftests/bpf/test_sockmap.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/bpf/test_sockmap.c b/tools/testing/selftests/bpf/test_sockmap.c index ab7e169f5afa..8d72901aa314 100644 --- a/tools/testing/selftests/bpf/test_sockmap.c +++ b/tools/testing/selftests/bpf/test_sockmap.c @@ -78,6 +78,7 @@ int txmsg_end_push; int txmsg_start_pop; int txmsg_pop; int txmsg_ingress; +int txmsg_pass_skb; int txmsg_redir_skb; int txmsg_ktls_skb; int txmsg_ktls_skb_drop; @@ -108,6 +109,7 @@ static const struct option long_options[] = { {"txmsg_start_pop", required_argument, NULL, 'w'}, {"txmsg_pop", required_argument, NULL, 'x'}, {"txmsg_ingress", no_argument, &txmsg_ingress, 1 }, + {"txmsg_pass_skb", no_argument, &txmsg_pass_skb, 1 }, {"txmsg_redir_skb", no_argument, &txmsg_redir_skb, 1 }, {"ktls", no_argument, &ktls, 1 }, {"peek", no_argument, &peek_flag, 1 }, @@ -177,6 +179,7 @@ static void test_reset(void) txmsg_pass = txmsg_drop = txmsg_redir = 0; txmsg_apply = txmsg_cork = 0; txmsg_ingress = txmsg_redir_skb = 0; + txmsg_pass_skb = 0; txmsg_ktls_skb = txmsg_ktls_skb_drop = txmsg_ktls_skb_redir = 0; txmsg_omit_skb_parser = 0; skb_use_parser = 0; @@ -956,6 +959,7 @@ static int run_options(struct sockmap_options *options, int cg_fd, int test) { int i, key, next_key, err, zero = 0; struct bpf_program *tx_prog; + struct bpf_program *skb_verdict_prog; /* If base test skip BPF setup */ if (test == BASE || test == BASE_SENDPAGE) @@ -972,7 +976,12 @@ static int run_options(struct sockmap_options *options, int cg_fd, int test) } } - links[1] = bpf_program__attach_sockmap(progs[1], map_fd[0]); + if (txmsg_pass_skb) + skb_verdict_prog = progs[2]; + else + skb_verdict_prog = progs[1]; + + links[1] = bpf_program__attach_sockmap(skb_verdict_prog, map_fd[0]); if (!links[1]) { fprintf(stderr, "ERROR: bpf_program__attach_sockmap (sockmap): (%s)\n", strerror(errno)); @@ -1361,6 +1370,8 @@ static void test_options(char *options) } if (txmsg_ingress) append_str(options, "ingress,", OPTSTRING); + if (txmsg_pass_skb) + append_str(options, "pass_skb,", OPTSTRING); if (txmsg_redir_skb) append_str(options, "redir_skb,", OPTSTRING); if (txmsg_ktls_skb) From patchwork Thu Jun 6 09:27:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Whitchurch via B4 Relay X-Patchwork-Id: 13688140 X-Patchwork-Delegate: bpf@iogearbox.net Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4063C15382A; Thu, 6 Jun 2024 09:28:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717666083; cv=none; b=dn+ca3frdY7Dj/JDS0HQ7o3f8GszVoMppK2HSvfKY6hydBITv5RtBlCA/86EHwqVr9U8L80Ew7h/fgt6b5KxBPXt97pBo9kSWtpYwjo1A8zV4mUzVC/0mdE87RJs2bDKbuBrD6nldj+EzFXSczOS5dxkqi2j5sVT0ePyAiOTwr4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717666083; c=relaxed/simple; bh=HaCO5EpmybPmkO6cIEht6Oez3hjJLdOYbQOAb1jCFiQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=F1abiDCfJ9ZLvxVBoGjkAwoyIKCHMYT8HowWyTQCuD8wNnCNAMVsdSYEhDjD+qAeyCdnxF6dqE79j4urNb3LzQBGyD7ZKsBbsHzhE1fTas8DxrGjc+E/Tqrhf2+Ub7lrzemdPq9gR9GhhEaqMq9qzVQDGJwvdrwVNWIG+If6VBo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kKDVyk6L; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kKDVyk6L" Received: by smtp.kernel.org (Postfix) with ESMTPS id F2406C4AF64; Thu, 6 Jun 2024 09:28:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717666083; bh=HaCO5EpmybPmkO6cIEht6Oez3hjJLdOYbQOAb1jCFiQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=kKDVyk6LZeYe/pRoV641wsAKXdiw2HfFXxxwUw/nO2HjCMezY14LQZUlC5vx+8NSy /21qHlV4sQhyrLmR0Pc6JWP1Nq8320fCrX77CxuPvghUyEqSqJposM91CgkB16WSq9 TQR0P4zoNRgAtTMsPqzuEKpBtc5PNx39qku9N0xFUTO83MEVsn0m3R/M64+shUqWkf 9GES/crw7NH4tXPCI101qb5zdXEKiH2aQGSnpN2hx62DO6thIitlZ3Y9BJSdPXMkCC jXblCRzAvgNVRRmlD7Qu+ZZeo4Lfex5ezJBUwKRzXAEXjB60ySEs9J1iLpR5liSlFw V8xayB/LGW7PQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id E6F6AC27C65; Thu, 6 Jun 2024 09:28:02 +0000 (UTC) From: Vincent Whitchurch via B4 Relay Date: Thu, 06 Jun 2024 11:27:56 +0200 Subject: [PATCH bpf-next 5/5] selftests/bpf: sockmap: Add basic splice(2) mode Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240606-sockmap-splice-v1-5-4820a2ab14b5@datadoghq.com> References: <20240606-sockmap-splice-v1-0-4820a2ab14b5@datadoghq.com> In-Reply-To: <20240606-sockmap-splice-v1-0-4820a2ab14b5@datadoghq.com> To: John Fastabend , Jakub Sitnicki Cc: netdev@vger.kernel.org, bpf@vger.kernel.org, Vincent Whitchurch X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1717666080; l=2849; i=vincent.whitchurch@datadoghq.com; s=20240606; h=from:subject:message-id; bh=qELVPIBlr9FpIjNgB+sL7xYA/TV1+f+XF9UJjqd3aMg=; b=ggN8lIeM5Plq+xrdoFVFgz3/EOKmVgaXdBF6crk8pcfSEFnlpkOVPB4YTad1KnUptDRtnS0wG wsG7QYpib2jAZ7sn2EUnsC7Cy8BUfeGv8mnenVH8K9uPCjlPjvhcRBb X-Developer-Key: i=vincent.whitchurch@datadoghq.com; a=ed25519; pk=GwUiPK96WuxbUAD4UjapyK7TOt+aX0EqABOZ/BOj+/M= X-Endpoint-Received: by B4 Relay for vincent.whitchurch@datadoghq.com/20240606 with auth_id=170 X-Original-From: Vincent Whitchurch Reply-To: vincent.whitchurch@datadoghq.com X-Patchwork-Delegate: bpf@iogearbox.net From: Vincent Whitchurch Add a test mode which uses splice(2) to do a read from the socket. Can be run with something like the below: ./test_sockmap -t splice --txmsg_omit_skb_parser --txmsg_pass_skb Signed-off-by: Vincent Whitchurch --- tools/testing/selftests/bpf/test_sockmap.c | 61 ++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/tools/testing/selftests/bpf/test_sockmap.c b/tools/testing/selftests/bpf/test_sockmap.c index 8d72901aa314..5be29ccb3323 100644 --- a/tools/testing/selftests/bpf/test_sockmap.c +++ b/tools/testing/selftests/bpf/test_sockmap.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 // Copyright (c) 2017-2018 Covalent IO, Inc. http://covalent.io +#define _GNU_SOURCE #include #include #include @@ -871,6 +872,61 @@ static int sendmsg_test(struct sockmap_options *opt) return err; } +static int splice_test(struct sockmap_options *opt) +{ + int pipefds[2]; + char buf[1024] = {0}; + ssize_t bytes; + int ret; + + ret = pipe(pipefds); + if (ret < 0) { + perror("pipe"); + return ret; + } + + bytes = send(c1, buf, sizeof(buf), 0); + if (bytes < 0) { + perror("send failed"); + return bytes; + } + if (bytes == 0) { + fprintf(stderr, "send wrote zero bytes\n"); + return -1; + } + + bytes = write(pipefds[1], buf, sizeof(buf)); + if (bytes < 0) { + perror("pipe write failed"); + return bytes; + } + + bytes = splice(p1, NULL, pipefds[1], NULL, sizeof(buf), 0); + if (bytes < 0) { + perror("splice failed"); + return bytes; + } + if (bytes == 0) { + fprintf(stderr, "spliced zero bytes\n"); + return -1; + } + + bytes = read(pipefds[0], buf, sizeof(buf)); + if (bytes < 0) { + perror("pipe read failed"); + return bytes; + } + if (bytes == 0) { + fprintf(stderr, "EOF from pipe\n"); + return -1; + } + + close(pipefds[1]); + close(pipefds[0]); + + return 0; +} + static int forever_ping_pong(int rate, struct sockmap_options *opt) { struct timeval timeout; @@ -953,6 +1009,7 @@ enum { BASE, BASE_SENDPAGE, SENDPAGE, + SPLICE, }; static int run_options(struct sockmap_options *options, int cg_fd, int test) @@ -1284,6 +1341,8 @@ static int run_options(struct sockmap_options *options, int cg_fd, int test) options->base = true; options->sendpage = true; err = sendmsg_test(options); + } else if (test == SPLICE) { + err = splice_test(options); } else fprintf(stderr, "unknown test\n"); out: @@ -2028,6 +2087,8 @@ int main(int argc, char **argv) test = BASE_SENDPAGE; } else if (strcmp(optarg, "sendpage") == 0) { test = SENDPAGE; + } else if (strcmp(optarg, "splice") == 0) { + test = SPLICE; } else { usage(argv); return -1;