All of lore.kernel.org
 help / color / mirror / Atom feed
From: Liu Jian <liujian56@huawei.com>
To: <ast@kernel.org>, <daniel@iogearbox.net>, <andrii@kernel.org>,
	<kafai@fb.com>, <songliubraving@fb.com>, <yhs@fb.com>,
	<john.fastabend@gmail.com>, <kpsingh@kernel.org>,
	<davem@davemloft.net>, <kuba@kernel.org>, <sdf@google.com>,
	<netdev@vger.kernel.org>, <bpf@vger.kernel.org>
Cc: <liujian56@huawei.com>
Subject: [PATCH bpf v2 2/2] selftests: bpf: add test for skb_load_bytes
Date: Wed, 13 Apr 2022 14:21:31 +0800	[thread overview]
Message-ID: <20220413062131.363740-3-liujian56@huawei.com> (raw)
In-Reply-To: <20220413062131.363740-1-liujian56@huawei.com>

Use bpf_prog_test_run_opts to test the skb_load_bytes function.
Tests the behavior when offset is greater than INT_MAX or a normal value.

Signed-off-by: Liu Jian <liujian56@huawei.com>
---
v1->v2: As Liu Song's review comments, use bpf skeleton and global variable.
 .../selftests/bpf/prog_tests/skb_load_bytes.c | 45 +++++++++++++++++++
 .../selftests/bpf/progs/skb_load_bytes.c      | 19 ++++++++
 2 files changed, 64 insertions(+)
 create mode 100644 tools/testing/selftests/bpf/prog_tests/skb_load_bytes.c
 create mode 100644 tools/testing/selftests/bpf/progs/skb_load_bytes.c

diff --git a/tools/testing/selftests/bpf/prog_tests/skb_load_bytes.c b/tools/testing/selftests/bpf/prog_tests/skb_load_bytes.c
new file mode 100644
index 000000000000..81cc224a0c69
--- /dev/null
+++ b/tools/testing/selftests/bpf/prog_tests/skb_load_bytes.c
@@ -0,0 +1,45 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <test_progs.h>
+#include <network_helpers.h>
+#include "skb_load_bytes.skel.h"
+
+void test_skb_load_bytes(void)
+{
+	struct skb_load_bytes *skel;
+	int err, prog_fd, test_result;
+	struct __sk_buff skb = { 0 };
+
+	LIBBPF_OPTS(bpf_test_run_opts, tattr,
+		.data_in = &pkt_v4,
+		.data_size_in = sizeof(pkt_v4),
+		.ctx_in = &skb,
+		.ctx_size_in = sizeof(skb),
+	);
+
+	skel = skb_load_bytes__open_and_load();
+	if (!ASSERT_OK_PTR(skel, "skel_open_and_load"))
+		return;
+
+	prog_fd = bpf_program__fd(skel->progs.skb_process);
+	if (prog_fd < 0)
+		goto out;
+
+	skel->bss->load_offset = (uint32_t)(-1);
+	tattr.data_out = NULL;
+	tattr.data_size_out = 0;
+	err = bpf_prog_test_run_opts(prog_fd, &tattr);
+	CHECK_ATTR(err != 0, "offset -1", "err %d errno %d\n", err, errno);
+	test_result = skel->bss->test_result;
+	CHECK_ATTR(test_result != -EFAULT, "offset -1", "test error\n");
+
+	skel->bss->load_offset = (uint32_t)10;
+	tattr.data_out = NULL;
+	tattr.data_size_out = 0;
+	err = bpf_prog_test_run_opts(prog_fd, &tattr);
+	CHECK_ATTR(err != 0, "offset 10", "err %d errno %d\n", err, errno);
+	test_result = skel->bss->test_result;
+	CHECK_ATTR(test_result != 0, "offset 10", "test error\n");
+
+out:
+	skb_load_bytes__destroy(skel);
+}
diff --git a/tools/testing/selftests/bpf/progs/skb_load_bytes.c b/tools/testing/selftests/bpf/progs/skb_load_bytes.c
new file mode 100644
index 000000000000..e4252fd973be
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/skb_load_bytes.c
@@ -0,0 +1,19 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/bpf.h>
+#include <bpf/bpf_helpers.h>
+
+char _license[] SEC("license") = "GPL";
+
+__u32 load_offset = 0;
+int test_result = 0;
+
+SEC("tc")
+int skb_process(struct __sk_buff *skb)
+{
+	char buf[16];
+
+	test_result = bpf_skb_load_bytes(skb, load_offset, buf, 10);
+
+	return 0;
+}
-- 
2.17.1


  parent reply	other threads:[~2022-04-13  6:19 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-13  6:21 [PATCH bpf v2 0/2] Enlarge offset check value in bpf_skb_load_bytes Liu Jian
2022-04-13  6:21 ` [PATCH bpf v2 1/2] net: Enlarge offset check value from 0xffff to INT_MAX " Liu Jian
2022-04-13 22:23   ` Daniel Borkmann
2022-04-13  6:21 ` Liu Jian [this message]
2022-04-13 21:11   ` [PATCH bpf v2 2/2] selftests: bpf: add test for skb_load_bytes Song Liu

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=20220413062131.363740-3-liujian56@huawei.com \
    --to=liujian56@huawei.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=john.fastabend@gmail.com \
    --cc=kafai@fb.com \
    --cc=kpsingh@kernel.org \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=sdf@google.com \
    --cc=songliubraving@fb.com \
    --cc=yhs@fb.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 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.