Thread (50 messages) 50 messages, 9 authors, 2021-12-08

Re: [PATCH v19 bpf-next 23/23] xdp: disable XDP_REDIRECT for xdp multi-buff

From: Lorenzo Bianconi <hidden>
Date: 2021-12-06 20:04:05
Also in: netdev

On Mon, Dec 6, 2021 at 11:11 AM Jesper Dangaard Brouer
[off-list ref] wrote:
quoted
On 30/11/2021 12.53, Lorenzo Bianconi wrote:
quoted
XDP_REDIRECT is not fully supported yet for xdp multi-buff since not
all XDP capable drivers can map non-linear xdp_frame in ndo_xdp_xmit
so disable it for the moment.

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
  net/core/filter.c | 7 +++++++
  1 file changed, 7 insertions(+)
diff --git a/net/core/filter.c b/net/core/filter.c
index b70725313442..a87d835d1122 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -4189,6 +4189,13 @@ int xdp_do_redirect(struct net_device *dev, struct xdp_buff *xdp,
      struct bpf_map *map;
      int err;

+     /* XDP_REDIRECT is not fully supported yet for xdp multi-buff since
+      * not all XDP capable drivers can map non-linear xdp_frame in
+      * ndo_xdp_xmit.
+      */
+     if (unlikely(xdp_buff_is_mb(xdp)))
+             return -EOPNOTSUPP;
+
This approach also exclude 'cpumap' use-case, which you AFAIK have added
MB support for in this patchset.

Generally this check is hopefully something we can remove again, once
drivers add MB ndo_xdp_xmit support.
What happens in the future when a new driver is added without (in its intial
version) MB ndo_xdp_xmit support? Is MB support for ndo_xdp_xmit going to be a
requirement for a driver (with ndo_xdp_xmit) to be accepted to the kernel?
I think the optimal solution would be export the driver XDP capabilities (AFAIK
there is an ogoing effort for this, but it is not available yet).
I'm not arguing against removing this check in the future, I'm just wondering
if we need a different mechanism than outright prohibiting XDP_REDIRECT with MB
to protect against the redirected device not having MB support?
quoted
quoted
      ri->map_id = 0; /* Valid map id idr range: [1,INT_MAX[ */
      ri->map_type = BPF_MAP_TYPE_UNSPEC;

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help