XDP hardware hints discussion mail archive
 help / color / mirror / Atom feed
From: Stanislav Fomichev <sdf@google.com>
To: bpf@vger.kernel.org
Cc: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
	martin.lau@linux.dev, song@kernel.org, yhs@fb.com,
	john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com,
	haoluo@google.com, jolsa@kernel.org, kuba@kernel.org,
	toke@kernel.org, willemb@google.com, dsahern@kernel.org,
	magnus.karlsson@intel.com, bjorn@kernel.org,
	maciej.fijalkowski@intel.com, hawk@kernel.org,
	yoong.siang.song@intel.com, netdev@vger.kernel.org,
	xdp-hints@xdp-project.net
Subject: [xdp-hints] [PATCH bpf-next v5 07/13] xsk: Validate xsk_tx_metadata flags
Date: Thu,  2 Nov 2023 15:58:31 -0700	[thread overview]
Message-ID: <20231102225837.1141915-8-sdf@google.com> (raw)
In-Reply-To: <20231102225837.1141915-1-sdf@google.com>

Accept only the flags that the kernel knows about to make
sure we can extend this field in the future. Note that only
in XDP_COPY mode we propagate the error signal back to the user
(via sendmsg). For zerocopy mode we silently skip the metadata
for the descriptors that have wrong flags (since we process
the descriptors deep in the driver).

Signed-off-by: Stanislav Fomichev <sdf@google.com>
---
 include/net/xdp_sock_drv.h | 23 ++++++++++++++++++++++-
 net/xdp/xsk.c              |  4 ++++
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/include/net/xdp_sock_drv.h b/include/net/xdp_sock_drv.h
index e2558ac3e195..5885176ea01e 100644
--- a/include/net/xdp_sock_drv.h
+++ b/include/net/xdp_sock_drv.h
@@ -165,12 +165,28 @@ static inline void *xsk_buff_raw_get_data(struct xsk_buff_pool *pool, u64 addr)
 	return xp_raw_get_data(pool, addr);
 }
 
+#define XDP_TXMD_FLAGS_VALID ( \
+		XDP_TXMD_FLAGS_TIMESTAMP | \
+		XDP_TXMD_FLAGS_CHECKSUM | \
+	0)
+
+static inline bool xsk_buff_valid_tx_metadata(struct xsk_tx_metadata *meta)
+{
+	return !(meta->request.flags & ~XDP_TXMD_FLAGS_VALID);
+}
+
 static inline struct xsk_tx_metadata *xsk_buff_get_metadata(struct xsk_buff_pool *pool, u64 addr)
 {
+	struct xsk_tx_metadata *meta;
+
 	if (!pool->tx_metadata_len)
 		return NULL;
 
-	return xp_raw_get_data(pool, addr) - pool->tx_metadata_len;
+	meta = xp_raw_get_data(pool, addr) - pool->tx_metadata_len;
+	if (unlikely(!xsk_buff_valid_tx_metadata(meta)))
+		return NULL; /* no way to signal the error to the user */
+
+	return meta;
 }
 
 static inline void xsk_buff_dma_sync_for_cpu(struct xdp_buff *xdp, struct xsk_buff_pool *pool)
@@ -332,6 +348,11 @@ static inline void *xsk_buff_raw_get_data(struct xsk_buff_pool *pool, u64 addr)
 	return NULL;
 }
 
+static inline bool xsk_buff_valid_tx_metadata(struct xsk_tx_metadata *meta)
+{
+	return false;
+}
+
 static inline struct xsk_tx_metadata *xsk_buff_get_metadata(struct xsk_buff_pool *pool, u64 addr)
 {
 	return NULL;
diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c
index 84fd10201f2a..0e81ae6bfff4 100644
--- a/net/xdp/xsk.c
+++ b/net/xdp/xsk.c
@@ -728,6 +728,10 @@ static struct sk_buff *xsk_build_skb(struct xdp_sock *xs,
 			}
 
 			meta = buffer - xs->pool->tx_metadata_len;
+			if (unlikely(!xsk_buff_valid_tx_metadata(meta))) {
+				err = -EINVAL;
+				goto free_err;
+			}
 
 			if (meta->request.flags & XDP_TXMD_FLAGS_CHECKSUM) {
 				if (unlikely(meta->request.csum_start +
-- 
2.42.0.869.gea05f2083d-goog


  parent reply	other threads:[~2023-11-02 22:59 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-02 22:58 [xdp-hints] [PATCH bpf-next v5 00/13] xsk: TX metadata Stanislav Fomichev
2023-11-02 22:58 ` [xdp-hints] [PATCH bpf-next v5 01/13] xsk: Support tx_metadata_len Stanislav Fomichev
2023-11-02 22:58 ` [xdp-hints] [PATCH bpf-next v5 02/13] xsk: Add TX timestamp and TX checksum offload support Stanislav Fomichev
2023-11-13 13:16   ` [xdp-hints] " Jesper Dangaard Brouer
2023-11-13 14:10     ` Stanislav Fomichev
2023-11-13 16:29       ` Jesper Dangaard Brouer
2023-11-13 17:02         ` Stanislav Fomichev
2023-11-15 10:05           ` Jesper Dangaard Brouer
2023-11-15 13:37             ` Stanislav Fomichev
2023-11-16 14:30               ` Jesper Dangaard Brouer
2023-11-20 20:45                 ` Stanislav Fomichev
2023-11-02 22:58 ` [xdp-hints] [PATCH bpf-next v5 03/13] tools: ynl: Print xsk-features from the sample Stanislav Fomichev
2023-11-02 22:58 ` [xdp-hints] [PATCH bpf-next v5 04/13] net/mlx5e: Implement AF_XDP TX timestamp and checksum offload Stanislav Fomichev
2023-11-02 22:58 ` [xdp-hints] [PATCH bpf-next v5 05/13] net: stmmac: Add Tx HWTS support to XDP ZC Stanislav Fomichev
2023-11-02 22:58 ` [xdp-hints] [PATCH bpf-next v5 06/13] xsk: Document tx_metadata_len layout Stanislav Fomichev
2023-11-05 12:45   ` [xdp-hints] " Simon Horman
2023-11-06 16:47     ` Stanislav Fomichev
2023-11-02 22:58 ` Stanislav Fomichev [this message]
2023-11-02 22:58 ` [xdp-hints] [PATCH bpf-next v5 08/13] xsk: Add option to calculate TX checksum in SW Stanislav Fomichev
2023-11-02 22:58 ` [xdp-hints] [PATCH bpf-next v5 09/13] selftests/xsk: Support tx_metadata_len Stanislav Fomichev
2023-11-02 22:58 ` [xdp-hints] [PATCH bpf-next v5 10/13] selftests/bpf: Add csum helpers Stanislav Fomichev
2023-11-02 22:58 ` [xdp-hints] [PATCH bpf-next v5 11/13] selftests/bpf: Add TX side to xdp_metadata Stanislav Fomichev
2023-11-02 22:58 ` [xdp-hints] [PATCH bpf-next v5 12/13] selftests/bpf: Convert xdp_hw_metadata to XDP_USE_NEED_WAKEUP Stanislav Fomichev
2023-11-02 22:58 ` [xdp-hints] [PATCH bpf-next v5 13/13] selftests/bpf: Add TX side to xdp_hw_metadata Stanislav Fomichev
2023-11-06 23:31 ` [xdp-hints] Re: [PATCH bpf-next v5 00/13] xsk: TX metadata Jakub Kicinski
2023-11-09 18:03 ` Alexei Starovoitov
2023-11-09 18:07   ` Stanislav Fomichev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://lists.xdp-project.net/postorius/lists/xdp-hints.xdp-project.net/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231102225837.1141915-8-sdf@google.com \
    --to=sdf@google.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bjorn@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=dsahern@kernel.org \
    --cc=haoluo@google.com \
    --cc=hawk@kernel.org \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kpsingh@kernel.org \
    --cc=kuba@kernel.org \
    --cc=maciej.fijalkowski@intel.com \
    --cc=magnus.karlsson@intel.com \
    --cc=martin.lau@linux.dev \
    --cc=netdev@vger.kernel.org \
    --cc=song@kernel.org \
    --cc=toke@kernel.org \
    --cc=willemb@google.com \
    --cc=xdp-hints@xdp-project.net \
    --cc=yhs@fb.com \
    --cc=yoong.siang.song@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox