From: "Alexei Starovoitov" <alexei.starovoitov@gmail.com>
To: "Kumar Kartikeya Dwivedi" <memxor@gmail.com>, <bpf@vger.kernel.org>
Cc: "Alexei Starovoitov" <ast@kernel.org>,
"Andrii Nakryiko" <andrii@kernel.org>,
"Daniel Borkmann" <daniel@iogearbox.net>,
"Eduard Zingerman" <eddyz87@gmail.com>,
"Emil Tsalapatis" <emil@etsalapatis.com>,
"Nicholas Carlini" <npc@anthropic.com>, <kkd@meta.com>,
<kernel-team@meta.com>
Subject: Re: [PATCH bpf v2 3/7] selftests/bpf: Test packet pointer class displacement pruning
Date: Sat, 05 Sep 2026 13:48:08 -0700 [thread overview]
Message-ID: <DL7OF45PMXXL.M40Z5M90EVCF@gmail.com> (raw)
In-Reply-To: <20260905083418.3723623-4-memxor@gmail.com>
On Sat Sep 5, 2026 at 1:34 AM PDT, Kumar Kartikeya Dwivedi wrote:
> Add two paths whose packet pointer ranges are individually compatible at
> a join but whose members have different relative displacements. The first
> path proves an eight-byte access through one member. On the second path,
> the same guard only proves that the access starts before data_end.
>
> An affected verifier prunes the second path and accepts the program. With
> packet pointer class displacement preserved, it explores that path and
> rejects the out-of-bounds access.
>
> Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
> ---
> .../progs/verifier_xdp_direct_packet_access.c | 44 +++++++++++++++++++
> 1 file changed, 44 insertions(+)
>
> diff --git a/tools/testing/selftests/bpf/progs/verifier_xdp_direct_packet_access.c b/tools/testing/selftests/bpf/progs/verifier_xdp_direct_packet_access.c
> index 0b86d95a4133..692a8468f3d7 100644
> --- a/tools/testing/selftests/bpf/progs/verifier_xdp_direct_packet_access.c
> +++ b/tools/testing/selftests/bpf/progs/verifier_xdp_direct_packet_access.c
> @@ -5,6 +5,50 @@
> #include <bpf/bpf_helpers.h>
> #include "bpf_misc.h"
>
> +SEC("xdp")
> +__description("XDP pkt regsafe preserves packet pointer class displacement")
> +__failure __msg("R2 min value is outside of the allowed memory range")
> +__flag(BPF_F_ANY_ALIGNMENT)
> +__naked void pkt_regsafe_class_displacement(void)
> +{
> + asm volatile ("\
> + r8 = *(u32 *)(r1 + %[xdp_md_data_end]);\
> + r9 = *(u32 *)(r1 + %[xdp_md_data]);\
> + r6 = r9;\
> + r6 += 8;\
> + if r6 > r8 goto l_exit_%=;\
> + r0 = *(u64 *)(r9 + 0);\
> + r4 = r0;\
> + r4 &= 15;\
> + r7 = r0;\
> + r7 >>= 63;\
> + if r7 != 0 goto l_path_b_%=;\
why all the loads and math? Are they meaningful for the test?
I suspect the test can be reduced in half.
> + r2 = r9;\
> + r2 += r4;\
> + r3 = r2;\
> + r3 += 4;\
> + goto l_join_%=;\
> +l_path_b_%=: \
> + r4 &= 3;\
> + r4 += 8;\
> + r2 = r9;\
> + r2 += r4;\
> + r3 = r2;\
> + r3 -= 4;\
> +l_join_%=: \
> + r5 = r3;\
> + r5 += 4;\
> + if r5 > r8 goto l_exit_%=;\
> + r0 = *(u64 *)(r2 + 0);\
> +l_exit_%=: \
> + r0 = 0;\
> + exit;\
> +" :
> + : __imm_const(xdp_md_data, offsetof(struct xdp_md, data)),
> + __imm_const(xdp_md_data_end, offsetof(struct xdp_md, data_end))
> + : __clobber_all);
> +}
> +
> SEC("xdp")
> __description("XDP pkt read, pkt_end mangling, bad access 1")
> __failure __msg("R3 pointer arithmetic on pkt_end")
next prev parent reply other threads:[~2026-09-05 20:48 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-05 8:34 [PATCH bpf v2 0/7] Misc bug fixes - part 5 Kumar Kartikeya Dwivedi
2026-09-05 8:34 ` [PATCH bpf v2 1/7] bpf: Make post-verification instruction rewrites killable Kumar Kartikeya Dwivedi
2026-09-11 22:56 ` Eduard Zingerman
2026-09-05 8:34 ` [PATCH bpf v2 2/7] bpf: Preserve packet pointer class displacement in regsafe() Kumar Kartikeya Dwivedi
2026-09-05 9:25 ` bot+bpf-ci
2026-09-05 20:46 ` Alexei Starovoitov
2026-09-06 6:40 ` Eduard Zingerman
2026-09-06 7:04 ` Eduard Zingerman
2026-09-06 15:11 ` Alexei Starovoitov
2026-09-05 8:34 ` [PATCH bpf v2 3/7] selftests/bpf: Test packet pointer class displacement pruning Kumar Kartikeya Dwivedi
2026-09-05 9:10 ` bot+bpf-ci
2026-09-05 20:48 ` Alexei Starovoitov [this message]
2026-09-05 8:34 ` [PATCH bpf v2 4/7] bpf: Reject fall-through across subprogram boundaries Kumar Kartikeya Dwivedi
2026-09-05 20:29 ` Alexei Starovoitov
2026-09-05 8:34 ` [PATCH bpf v2 5/7] selftests/bpf: Test poisoned subprogram terminator Kumar Kartikeya Dwivedi
2026-09-05 8:34 ` [PATCH bpf v2 6/7] bpf: Assign lock identity to callback map values Kumar Kartikeya Dwivedi
2026-09-05 9:25 ` bot+bpf-ci
2026-09-12 0:23 ` Eduard Zingerman
2026-09-05 8:34 ` [PATCH bpf v2 7/7] selftests/bpf: Check callback map value lock identity Kumar Kartikeya Dwivedi
2026-09-05 9:10 ` bot+bpf-ci
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=DL7OF45PMXXL.M40Z5M90EVCF@gmail.com \
--to=alexei.starovoitov@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=emil@etsalapatis.com \
--cc=kernel-team@meta.com \
--cc=kkd@meta.com \
--cc=memxor@gmail.com \
--cc=npc@anthropic.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