From: Jakub Sitnicki <jakub@cloudflare.com>
To: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: bpf <bpf@vger.kernel.org>,
Network Development <netdev@vger.kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Jesper Dangaard Brouer <hawk@kernel.org>,
John Fastabend <john.fastabend@gmail.com>,
Stanislav Fomichev <sdf@fomichev.me>,
Simon Horman <horms@kernel.org>,
Andrii Nakryiko <andrii@kernel.org>,
Martin KaFai Lau <martin.lau@linux.dev>,
Eduard Zingerman <eddyz87@gmail.com>, Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
KP Singh <kpsingh@kernel.org>, Hao Luo <haoluo@google.com>,
Jiri Olsa <jolsa@kernel.org>,
kernel-team <kernel-team@cloudflare.com>
Subject: Re: [PATCH bpf-next v3 16/17] bpf: Realign skb metadata for TC progs using data_meta
Date: Thu, 08 Jan 2026 20:54:54 +0100 [thread overview]
Message-ID: <87a4ynj2wh.fsf@cloudflare.com> (raw)
In-Reply-To: <CAADnVQKR9Myx_ervEzNihoWm=6=_B4LebPhPezm9rOSReE1bjQ@mail.gmail.com> (Alexei Starovoitov's message of "Wed, 7 Jan 2026 14:01:12 -0800")
On Wed, Jan 07, 2026 at 02:01 PM -08, Alexei Starovoitov wrote:
> On Wed, Jan 7, 2026 at 6:28 AM Jakub Sitnicki <jakub@cloudflare.com> wrote:
>>
>>
>> +static void bpf_skb_meta_realign(struct sk_buff *skb)
>> +{
>> + u8 *meta_end = skb_metadata_end(skb);
>> + u8 meta_len = skb_metadata_len(skb);
>> + u8 *meta;
>> + int gap;
>> +
>> + gap = skb_mac_header(skb) - meta_end;
>> + if (!meta_len || !gap)
>> + return;
>> +
>> + if (WARN_ONCE(gap < 0, "skb metadata end past mac header")) {
>> + skb_metadata_clear(skb);
>> + return;
>> + }
>> +
>> + meta = meta_end - meta_len;
>> + memmove(meta + gap, meta, meta_len);
>> + skb_shinfo(skb)->meta_end += gap;
>> +
>> + bpf_compute_data_pointers(skb);
>> +}
>> +
>> static int tc_cls_act_prologue(struct bpf_insn *insn_buf, u32 pkt_access_flags,
>> const struct bpf_prog *prog)
>> {
>> - return bpf_unclone_prologue(insn_buf, pkt_access_flags, prog,
>> - TC_ACT_SHOT);
>> + struct bpf_insn *insn = insn_buf;
>> + int cnt;
>> +
>> + if (pkt_access_flags & PA_F_DATA_META_LOAD) {
>> + /* Realign skb metadata for access through data_meta pointer.
>> + *
>> + * r6 = r1; // r6 will be "u64 *ctx"
>> + * r0 = bpf_skb_meta_realign(r1); // r0 is undefined
>> + * r1 = r6;
>> + */
>> + BUILD_BUG_ON(!__same_type(&bpf_skb_meta_realign,
>> + (void (*)(struct sk_buff *))NULL));
>> + *insn++ = BPF_MOV64_REG(BPF_REG_6, BPF_REG_1);
>> + *insn++ = BPF_EMIT_CALL(bpf_skb_meta_realign);
>
> Not quite. drop this BUILD_BUG_ON(), since it's pointless and misleading.
Will do.
> bpf_skb_meta_realign() has to be the one done with BPF_CALL_1(...).
> Otherwise above will work only on x86.
> In this case on arm64 too, but it's by accident.
> BPF_CALL* has to do ABI conversion from BPF to native.
>
> For kfuncs that's what JITs do via btf_func_model machinery.
Oh, 32-bit ARM has different register mapping. TIL. Thanks.
next prev parent reply other threads:[~2026-01-08 19:55 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-07 14:28 [PATCH bpf-next v3 00/17] Decouple skb metadata tracking from MAC header offset Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 01/17] bnxt_en: Call skb_metadata_set when skb->data points at metadata end Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 02/17] i40e: " Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 03/17] igb: " Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 04/17] igc: " Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 05/17] ixgbe: " Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 06/17] net/mlx5e: " Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 07/17] veth: " Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 08/17] xsk: " Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 09/17] xdp: " Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 10/17] net: Track skb metadata end separately from MAC offset Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 11/17] bpf, verifier: Remove side effects from may_access_direct_pkt_data Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 12/17] bpf, verifier: Turn seen_direct_write flag into a bitmap Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 13/17] bpf, verifier: Propagate packet access flags to gen_prologue Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 14/17] bpf, verifier: Track when data_meta pointer is loaded Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 15/17] bpf, verifier: Support direct kernel calls in gen_prologue Jakub Sitnicki
2026-01-07 14:28 ` [PATCH bpf-next v3 16/17] bpf: Realign skb metadata for TC progs using data_meta Jakub Sitnicki
2026-01-07 22:01 ` Alexei Starovoitov
2026-01-08 19:54 ` Jakub Sitnicki [this message]
2026-01-07 14:28 ` [PATCH bpf-next v3 17/17] selftests/bpf: Test skb metadata access after L2 decapsulation Jakub Sitnicki
2026-01-08 15:47 ` [PATCH bpf-next v3 00/17] Decouple skb metadata tracking from MAC header offset Jakub Kicinski
2026-01-08 19:25 ` Jakub Sitnicki
2026-01-09 1:49 ` Jakub Kicinski
2026-01-09 10:50 ` Jakub Sitnicki
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=87a4ynj2wh.fsf@cloudflare.com \
--to=jakub@cloudflare.com \
--cc=alexei.starovoitov@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=eddyz87@gmail.com \
--cc=edumazet@google.com \
--cc=haoluo@google.com \
--cc=hawk@kernel.org \
--cc=horms@kernel.org \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kernel-team@cloudflare.com \
--cc=kpsingh@kernel.org \
--cc=kuba@kernel.org \
--cc=martin.lau@linux.dev \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=song@kernel.org \
--cc=yonghong.song@linux.dev \
/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.