Re: [PATCH 2/2] selftests/bpf: validate rx_queue_index in xdp_metadata
From: bot+bpf-ci@kernel.org
Date: 2026-06-19 20:50:44
Also in:
bpf, linux-kselftest, lkml
Extend xdp_metadata selftest coverage to validate that ctx->rx_queue_index is preserved and observable after XDP redirect execution. Capture rx_queue_index in metadata and assert that it matches the expected queue during packet verification. Signed-off-by: Siddharth_Cibi <redacted>
The changelog says the test validates that ctx->rx_queue_index is "preserved and observable after XDP redirect execution". Looking at the program in progs/xdp_metadata.c, rx() reads ctx->rx_queue_index and then redirects into an XSKMAP: meta->rx_queue_index = ctx->rx_queue_index; return bpf_redirect_map(&xsk, ctx->rx_queue_index, XDP_PASS); The AF_XDP delivery path copies the frame and metadata straight into the umem and does not re-run an XDP program after the redirect, so the value stored in meta->rx_queue_index is the one read in the original ingress context rather than a value restored on a later re-execution. Does the assert in verify_xsk_metadata() actually exercise a redirect-restore path, or does it pass purely from the value captured in the ingress program? This isn't a bug, but could the changelog describe which redirect path the test exercises, since the AF_XDP (XSKMAP) path does not re-run an XDP program after the redirect?
quoted hunk ↗ jump to hunk
diff --git a/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c b/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c index 5c31054ad4a4..f8cabbbe7bb7 100644 --- a/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c +++ b/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c@@ -309,7 +309,8 @@ static int verify_xsk_metadata(struct xsk *xsk, bool sent_from_af_xdp) if (!ASSERT_NEQ(meta->rx_hash, 0, "rx_hash")) return -1; - + if (!ASSERT_EQ(meta->rx_queue_index, QUEUE_ID, "rx_queue_index")) + return -1;
This isn't a bug, but the new return is indented with eight spaces followed by a tab, while the other return -1; statements in verify_xsk_metadata() use two tabs. Could it use tabs to match the surrounding lines?
quoted hunk ↗ jump to hunk
if (!sent_from_af_xdp) { if (!ASSERT_NEQ(meta->rx_hash_type & XDP_RSS_TYPE_L4, 0, "rx_hash_type")) return -1;diff --git a/tools/testing/selftests/bpf/progs/xdp_metadata.c b/tools/testing/selftests/bpf/progs/xdp_metadata.c index 09bb8a038d52..62ae83860d7f 100644 --- a/tools/testing/selftests/bpf/progs/xdp_metadata.c +++ b/tools/testing/selftests/bpf/progs/xdp_metadata.c@@ -98,7 +98,7 @@ int rx(struct xdp_md *ctx) bpf_xdp_metadata_rx_hash(ctx, &meta->rx_hash, &meta->rx_hash_type); bpf_xdp_metadata_rx_vlan_tag(ctx, &meta->rx_vlan_proto, &meta->rx_vlan_tci); - + meta->rx_queue_index = ctx->rx_queue_index; return bpf_redirect_map(&xsk, ctx->rx_queue_index, XDP_PASS); }
--- AI reviewed your patch. Please fix the bug or email reply why it's not a bug. See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md CI run summary: https://github.com/kernel-patches/bpf/actions/runs/27846609854