All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jesper Dangaard Brouer <brouer@redhat.com>
To: bpf@vger.kernel.org
Cc: Jesper Dangaard Brouer <brouer@redhat.com>,
	netdev@vger.kernel.org, Daniel Borkmann <borkmann@iogearbox.net>,
	Alexei Starovoitov <alexei.starovoitov@gmail.com>,
	maze@google.com, lmb@cloudflare.com, shaun@tigera.io,
	Lorenzo Bianconi <lorenzo@kernel.org>,
	marek@cloudflare.com, John Fastabend <john.fastabend@gmail.com>,
	Jakub Kicinski <kuba@kernel.org>,
	eyal.birger@gmail.com, colrack@gmail.com
Subject: [PATCH bpf-next V6 2/7] bpf: fix bpf_fib_lookup helper MTU check for SKB ctx
Date: Wed, 18 Nov 2020 16:29:35 +0100	[thread overview]
Message-ID: <160571337537.2801246.15228178384451037535.stgit@firesoul> (raw)
In-Reply-To: <160571331409.2801246.11527010115263068327.stgit@firesoul>

BPF end-user on Cilium slack-channel (Carlo Carraro) wants to use
bpf_fib_lookup for doing MTU-check, but *prior* to extending packet size,
by adjusting fib_params 'tot_len' with the packet length plus the
expected encap size. (Just like the bpf_check_mtu helper supports). He
discovered that for SKB ctx the param->tot_len was not used, instead
skb->len was used (via MTU check in is_skb_forwardable()).

Fix this by using fib_params 'tot_len' for MTU check.  If not provided
(e.g. zero) then keep existing behaviour intact.

Fixes: 4c79579b44b1 ("bpf: Change bpf_fib_lookup to return lookup status")
Reported-by: Carlo Carraro <colrack@gmail.com>
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
 net/core/filter.c |   12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/net/core/filter.c b/net/core/filter.c
index 1ee97fdeea64..ae1fe8e6069a 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -5567,10 +5567,20 @@ BPF_CALL_4(bpf_skb_fib_lookup, struct sk_buff *, skb,
 
 	if (!rc) {
 		struct net_device *dev;
+		u32 mtu;
 
 		dev = dev_get_by_index_rcu(net, params->ifindex);
-		if (!is_skb_forwardable(dev, skb))
+		mtu = dev->mtu;
+
+		/* Using tot_len for L3 MTU check if provided by user. Notice at
+		 * this TC cls_bpf level skb->len contains L2 size, but
+		 * is_skb_forwardable takes that into account.
+		 */
+		if (params->tot_len > mtu) {
 			rc = BPF_FIB_LKUP_RET_FRAG_NEEDED;
+		} else if (!is_skb_forwardable(dev, skb)) {
+			rc = BPF_FIB_LKUP_RET_FRAG_NEEDED;
+		}
 	}
 
 	return rc;



  parent reply	other threads:[~2020-11-18 15:29 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-18 15:29 [PATCH bpf-next V6 0/7] bpf: New approach for BPF MTU handling Jesper Dangaard Brouer
2020-11-18 15:29 ` [PATCH bpf-next V6 1/7] bpf: Remove MTU check in __bpf_skb_max_len Jesper Dangaard Brouer
2020-11-18 15:29 ` Jesper Dangaard Brouer [this message]
2020-11-20  8:26   ` [PATCH bpf-next V6 2/7] bpf: fix bpf_fib_lookup helper MTU check for SKB ctx Jesper Dangaard Brouer
2020-11-20 13:15     ` Carlo Carraro
2020-11-20 15:53       ` David Ahern
2020-11-18 15:29 ` [PATCH bpf-next V6 3/7] bpf: bpf_fib_lookup return MTU value as output when looked up Jesper Dangaard Brouer
2020-11-18 15:29 ` [PATCH bpf-next V6 4/7] bpf: add BPF-helper for MTU checking Jesper Dangaard Brouer
2020-11-18 15:29 ` [PATCH bpf-next V6 5/7] bpf: drop MTU check when doing TC-BPF redirect to ingress Jesper Dangaard Brouer
2020-11-18 15:29 ` [PATCH bpf-next V6 6/7] bpf: make it possible to identify BPF redirected SKBs Jesper Dangaard Brouer
2020-11-18 15:30 ` [PATCH bpf-next V6 7/7] selftests/bpf: use bpf_check_mtu in selftest test_cls_redirect Jesper Dangaard Brouer

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

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

  git send-email \
    --in-reply-to=160571337537.2801246.15228178384451037535.stgit@firesoul \
    --to=brouer@redhat.com \
    --cc=alexei.starovoitov@gmail.com \
    --cc=borkmann@iogearbox.net \
    --cc=bpf@vger.kernel.org \
    --cc=colrack@gmail.com \
    --cc=eyal.birger@gmail.com \
    --cc=john.fastabend@gmail.com \
    --cc=kuba@kernel.org \
    --cc=lmb@cloudflare.com \
    --cc=lorenzo@kernel.org \
    --cc=marek@cloudflare.com \
    --cc=maze@google.com \
    --cc=netdev@vger.kernel.org \
    --cc=shaun@tigera.io \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.