From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D4F83161A1 for ; Tue, 16 Jun 2026 13:17:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781615873; cv=none; b=GNKAau6EEtXitgNlMa070TuZr5ofN2kifs5clCeK28vm4dIvjeNFhIohNcDe4A6guNHH1atUMNdx/fmGLII5eCMpWrqKIThR5Y74CleL7PwHhgxchAfmYjX4vqHV/7lmVlnQdIy/diM22IbWBxYPRceocx44sjkg61sygEUg5yY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781615873; c=relaxed/simple; bh=EGERGdCx2kYeS7W9iwSbT/bvqw0eSLVjuKRazBmEJAw=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=qN/sbh9ZoyCVdGr9v+TEYX0oVRxBDe/73Qj/P/QcISc+TwUD7X6G44mOKDUDw5BR7ntnDBwQSIIgsFbzW43R0bobrMJZdxZNOzp3q4iyY0mYGK3pWPlPLmK8FvziO4WjNyAVVTXlLdIUsq/r5r95ETxDcu3Q6WZXTIdRjVsVGIo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gcS+eXT1; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gcS+eXT1" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-492329c5514so793295e9.1 for ; Tue, 16 Jun 2026 06:17:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781615867; x=1782220667; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=85JsgvYD1YLd3UTUsIZxYoHmTb8gB/2tl6mfyWcf1Bg=; b=gcS+eXT1DV6Kk1SiY7/E/IqA9dag6Mp38ZE4sRl4baYb2SXdnpMJTHsk/z8fXqLK7Z EI5aD0epiICHZNv4RDDf1g2UfWFLrLC/DfiYJ8mPQQ/B8EgN0zyWSQkkH5oLY7jBoByW 9alOdozBbCr9yb6n8vWnoWKjZNZOlZZEvaaBKv5DKDgxhHzyOT0zlTyCj+5nsXSF/+vz A3XP4Qh0RRLDqimUZsgzLSjZ+Ez+5RrLXWl1kw8BzUkSQlVBOuxH3jPz3DX1j4PHPgZ+ jH20l0y6fPrd1BMqRkTscinXjP1zrKAXoWa1ExUVEJT3aRBpqiJOLZDDXSFbB+5T4jIl 3D1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781615867; x=1782220667; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=85JsgvYD1YLd3UTUsIZxYoHmTb8gB/2tl6mfyWcf1Bg=; b=Rqljx0Yzk+6wgmul23PNkt7xPiTOCmcDczs3PbwfvYwRbHY1mlxCIrdwZEFqEyzBFo DyZQvfbIw/zxUIJ7WF/aNtSmv12lM73MOp30E09NWxHwjUOQHi1ror3+Q8f26VNfEx3Q FygwbMtB4M1sw1thE04X7Y2jiizhEJBwroQiMP6n+pFBuDKNamcP3pJ4PmbJBfSvOzb4 5XbULUt00F1Ajc/nyKtHtzLWRScPZlDnHjRewGiLUfjcrRwMonWVrNYGbGyqL9CCAdz8 FiZ/yANL8uInSCkKt7u4FfounuwV6noLDzMQEnJVGLzOlg8Ss1uNm38BJr30f9yewyfX Clnw== X-Forwarded-Encrypted: i=1; AFNElJ+Q2Qd70k07EitLjOQmA0jwEKXQg5WK2CsvvalmRNoF2jS0xAFFUUUgjCS5drel639WOZgi2LKCsY9dxL4=@vger.kernel.org X-Gm-Message-State: AOJu0Yxf+2QiJUc34/wFnSPUCE6dQRpWgvGkHraloOlfyen+Fy8A4RfL UFVuu9OOAug2LMjyBFgDUcYzMNv6GdDnZ8/qFnnQpcnVSebAIE5suwgN X-Gm-Gg: Acq92OEhg1b+UnId4J2WMhuah3GJkiGLIGoNwoFsiGe7bHWsIAYJiNGNexHD5kVvsS1 /uO0LNys0izTPW47yyd6jsU3hGB6e4kBq9HhBGZGhpsxjdjTG59cf5MVCeNHuBGcrHaUswAI5No ehBSeubMDyZpV766dQexb/P/28H1qQK3O/txzsdo16sS5bEWHyscCQdKTATKNhCkNL4Ioc8V2ut wM5WKzmp2/RVS25LlwYVYm5a9M1N8ItfVAOipe5nPjfTOhO4PcCLjs0BOEIX4Ek5aWVlU6BxYnV v4MRp7uqgtSYcOj+KzqSGT/TmzJg7JAZj7ZPKR+ajmKH6Cct4CPeKDyoR6bNpHQJTM5MHS3dxfV LKBEz4r347yH2aUtIi4SNKRthxaFOmjbC5GrdsRhQPzMfow+NZFDE90uoZ7jcP4X7tXlVp2NqPG IVL8srVToz8+ZhGIRZHXOs4habV8OSOSMawyQ/b72PLhQWdzuLqgEkU/rte1XuT5z8bCdQ6HsKm FATsbwv6lwPcWIaLZP0SN7Ek9N6ju4PvrCzfOKBZmaGqUMHcEuIaMti+l3Ygm3bOkY70nBGfq9e YycyDRe0Bvf8VLoMskTAvKS8Z6X/TzeRyLGOiDvsPaw= X-Received: by 2002:a05:600c:810b:b0:489:32b:ac0b with SMTP id 5b1f17b1804b1-4922fac1214mr55599015e9.6.1781615866488; Tue, 16 Jun 2026 06:17:46 -0700 (PDT) Received: from mail.gmail.com (2a01cb0889497e004325bddd753d2e35.ipv6.abo.wanadoo.fr. [2a01:cb08:8949:7e00:4325:bddd:753d:2e35]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49230a4601esm67361305e9.1.2026.06.16.06.17.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Jun 2026 06:17:45 -0700 (PDT) Date: Tue, 16 Jun 2026 15:17:43 +0200 From: Paul Chaignon To: Sun Jian Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, eddyz87@gmail.com, memxor@gmail.com, song@kernel.org, yonghong.song@linux.dev, jolsa@kernel.org, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org, shuah@kernel.org, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me, toke@redhat.com, lorenzo@kernel.org Subject: Re: [PATCH bpf v2 2/2] selftests/bpf: Cover partial copy of non-linear test_run output Message-ID: References: <20260616093103.471444-1-sun.jian.kdev@gmail.com> <20260616093103.471444-3-sun.jian.kdev@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260616093103.471444-3-sun.jian.kdev@gmail.com> On Tue, Jun 16, 2026 at 05:31:03PM +0800, Sun Jian wrote: > prog_run_opts already verifies that BPF_PROG_TEST_RUN returns -ENOSPC > for a short data_out buffer while still reporting the full output size > through data_size_out. > > Add the same coverage for non-linear test_run output. Use pass-through > TC and XDP programs with a 9000-byte packet, a 64-byte linear data area, > and a 100-byte data_out buffer. The expected output spans both the linear > data and the first fragment. > > Verify that test_run returns -ENOSPC, reports the full packet length > through data_size_out, and copies the packet prefix into data_out for > both non-linear skb and XDP frags paths. > > Signed-off-by: Sun Jian > --- > .../selftests/bpf/prog_tests/prog_run_opts.c | 72 +++++++++++++++++++ > .../selftests/bpf/progs/test_pkt_access.c | 12 ++++ > 2 files changed, 84 insertions(+) > > diff --git a/tools/testing/selftests/bpf/prog_tests/prog_run_opts.c b/tools/testing/selftests/bpf/prog_tests/prog_run_opts.c > index 01f1d1b6715a..71af1ff02023 100644 > --- a/tools/testing/selftests/bpf/prog_tests/prog_run_opts.c > +++ b/tools/testing/selftests/bpf/prog_tests/prog_run_opts.c > @@ -4,6 +4,10 @@ > > #include "test_pkt_access.skel.h" > > +#define NONLINEAR_PKT_LEN 9000 > +#define NONLINEAR_LINEAR_DATA_LEN 64 > +#define SHORT_OUT_LEN 100 > + > static const __u32 duration; > > static void check_run_cnt(int prog_fd, __u64 run_cnt) > @@ -20,6 +24,71 @@ static void check_run_cnt(int prog_fd, __u64 run_cnt) > "incorrect number of repetitions, want %llu have %llu\n", run_cnt, info.run_cnt); > } > > +static void init_pkt(__u8 *pkt, size_t len) > +{ > + size_t i; > + > + for (i = 0; i < len; i++) > + pkt[i] = i & 0xff; > +} > + > +static void test_skb_nonlinear_data_out_partial(struct test_pkt_access *skel) > +{ > + LIBBPF_OPTS(bpf_test_run_opts, topts); > + __u8 pkt[NONLINEAR_PKT_LEN]; > + __u8 out[SHORT_OUT_LEN]; > + struct __sk_buff skb = {}; > + int prog_fd, err; > + > + init_pkt(pkt, sizeof(pkt)); Can't we reuse pkt_v4 by reducing the linear area to ETH_HLEN? > + memset(out, 0xa5, sizeof(out)); Why is this needed? > + > + skb.data_end = NONLINEAR_LINEAR_DATA_LEN; > + > + topts.data_in = pkt; > + topts.data_size_in = sizeof(pkt); > + topts.data_out = out; > + topts.data_size_out = sizeof(out); > + topts.ctx_in = &skb; > + topts.ctx_size_in = sizeof(skb); > + > + prog_fd = bpf_program__fd(skel->progs.tc_pass_prog); > + err = bpf_prog_test_run_opts(prog_fd, &topts); > + > + ASSERT_EQ(err, -ENOSPC, "skb_nonlinear_partial_err"); > + ASSERT_EQ(topts.data_size_out, sizeof(pkt), "skb_nonlinear_partial_data_size_out"); > + ASSERT_OK(memcmp(out, pkt, sizeof(out)), "skb_nonlinear_partial_data_out"); > +} > + > +static void test_xdp_nonlinear_data_out_partial(struct test_pkt_access *skel) > +{ > + LIBBPF_OPTS(bpf_test_run_opts, topts); > + __u8 pkt[NONLINEAR_PKT_LEN]; > + __u8 out[SHORT_OUT_LEN]; > + struct xdp_md ctx = {}; > + int prog_fd, err; > + > + init_pkt(pkt, sizeof(pkt)); > + memset(out, 0xa5, sizeof(out)); > + > + ctx.data = 0; > + ctx.data_end = NONLINEAR_LINEAR_DATA_LEN; > + > + topts.data_in = pkt; > + topts.data_size_in = sizeof(pkt); > + topts.data_out = out; > + topts.data_size_out = sizeof(out); > + topts.ctx_in = &ctx; > + topts.ctx_size_in = sizeof(ctx); > + > + prog_fd = bpf_program__fd(skel->progs.xdp_frags_pass_prog); > + err = bpf_prog_test_run_opts(prog_fd, &topts); > + > + ASSERT_EQ(err, -ENOSPC, "xdp_nonlinear_partial_err"); > + ASSERT_EQ(topts.data_size_out, sizeof(pkt), "xdp_nonlinear_partial_data_size_out"); > + ASSERT_OK(memcmp(out, pkt, sizeof(out)), "xdp_nonlinear_partial_data_out"); > +} > + > void test_prog_run_opts(void) > { > struct test_pkt_access *skel; > @@ -69,6 +138,9 @@ void test_prog_run_opts(void) > run_cnt += topts.repeat; > check_run_cnt(prog_fd, run_cnt); > > + test_skb_nonlinear_data_out_partial(skel); > + test_xdp_nonlinear_data_out_partial(skel); > + > cleanup: > if (skel) > test_pkt_access__destroy(skel); > diff --git a/tools/testing/selftests/bpf/progs/test_pkt_access.c b/tools/testing/selftests/bpf/progs/test_pkt_access.c > index bce7173152c6..cd284401eebd 100644 > --- a/tools/testing/selftests/bpf/progs/test_pkt_access.c > +++ b/tools/testing/selftests/bpf/progs/test_pkt_access.c > @@ -150,3 +150,15 @@ int test_pkt_access(struct __sk_buff *skb) > > return TC_ACT_UNSPEC; > } > + > +SEC("tc") > +int tc_pass_prog(struct __sk_buff *skb) > +{ > + return TC_ACT_OK; > +} Once we're reusing pkt_v4, maybe we can also reuse the existing BPF program? > + > +SEC("xdp.frags") > +int xdp_frags_pass_prog(struct xdp_md *ctx) > +{ > + return XDP_PASS; > +} > -- > 2.43.0 >