All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stanislav Fomichev <sdf@fomichev.me>
To: "Alexis Lothoré (eBPF Foundation)" <alexis.lothore@bootlin.com>
Cc: Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	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>,
	John Fastabend <john.fastabend@gmail.com>,
	KP Singh <kpsingh@kernel.org>, Hao Luo <haoluo@google.com>,
	Jiri Olsa <jolsa@kernel.org>, Mykola Lysenko <mykolal@fb.com>,
	Shuah Khan <shuah@kernel.org>,
	ebpf@linuxfoundation.org,
	Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
	bpf@vger.kernel.org, linux-kselftest@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/3] selftests/bpf: convert test_dev_cgroup to test_progs
Date: Fri, 26 Jul 2024 15:48:15 -0700	[thread overview]
Message-ID: <ZqQnrxyZ1nT93PLo@mini-arch> (raw)
In-Reply-To: <20240725-convert_dev_cgroup-v1-2-2c8cbd487c44@bootlin.com>

On 07/25, Alexis Lothoré (eBPF Foundation) wrote:
> test_dev_cgroup is defined as a standalone test program, and so is not
> executed in CI.
> 
> Convert it to test_progs framework so it is tested automatically in CI, and
> remove the old test. In order to be able to run it in test_progs, /dev/null
> must remain usable, so change the new test to test operations on devices
> 1:3 as valid, and operations on devices 1:5 (/dev/zero) as invalid.
> 
> Signed-off-by: Alexis Lothoré (eBPF Foundation) <alexis.lothore@bootlin.com>
> ---
>  tools/testing/selftests/bpf/.gitignore             |   1 -
>  tools/testing/selftests/bpf/Makefile               |   2 -
>  .../testing/selftests/bpf/prog_tests/cgroup_dev.c  | 120 +++++++++++++++++++++
>  tools/testing/selftests/bpf/test_dev_cgroup.c      |  85 ---------------
>  4 files changed, 120 insertions(+), 88 deletions(-)
> 
> diff --git a/tools/testing/selftests/bpf/.gitignore b/tools/testing/selftests/bpf/.gitignore
> index 4e4aae8aa7ec..8f14d8faeb0b 100644
> --- a/tools/testing/selftests/bpf/.gitignore
> +++ b/tools/testing/selftests/bpf/.gitignore
> @@ -9,7 +9,6 @@ test_lpm_map
>  test_tag
>  FEATURE-DUMP.libbpf
>  fixdep
> -test_dev_cgroup
>  /test_progs
>  /test_progs-no_alu32
>  /test_progs-bpf_gcc
> diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
> index aeada478e37a..2a9ba2246f80 100644
> --- a/tools/testing/selftests/bpf/Makefile
> +++ b/tools/testing/selftests/bpf/Makefile
> @@ -69,7 +69,6 @@ endif
>  
>  # Order correspond to 'make run_tests' order
>  TEST_GEN_PROGS = test_verifier test_tag test_maps test_lru_map test_lpm_map test_progs \
> -	test_dev_cgroup \
>  	test_sock test_sockmap get_cgroup_id_user \
>  	test_cgroup_storage \
>  	test_tcpnotify_user test_sysctl \
> @@ -295,7 +294,6 @@ JSON_WRITER		:= $(OUTPUT)/json_writer.o
>  CAP_HELPERS	:= $(OUTPUT)/cap_helpers.o
>  NETWORK_HELPERS := $(OUTPUT)/network_helpers.o
>  
> -$(OUTPUT)/test_dev_cgroup: $(CGROUP_HELPERS) $(TESTING_HELPERS)
>  $(OUTPUT)/test_skb_cgroup_id_user: $(CGROUP_HELPERS) $(TESTING_HELPERS)
>  $(OUTPUT)/test_sock: $(CGROUP_HELPERS) $(TESTING_HELPERS)
>  $(OUTPUT)/test_sockmap: $(CGROUP_HELPERS) $(TESTING_HELPERS)
> diff --git a/tools/testing/selftests/bpf/prog_tests/cgroup_dev.c b/tools/testing/selftests/bpf/prog_tests/cgroup_dev.c
> new file mode 100644
> index 000000000000..5112b99213ad
> --- /dev/null
> +++ b/tools/testing/selftests/bpf/prog_tests/cgroup_dev.c
> @@ -0,0 +1,120 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +#include <sys/stat.h>
> +#include <sys/sysmacros.h>
> +#include "test_progs.h"
> +#include "cgroup_helpers.h"
> +#include "dev_cgroup.skel.h"
> +
> +#define TEST_CGROUP "/test-bpf-based-device-cgroup/"
> +#define TEST_BUFFER_SIZE 64
> +
> +static void test_mknod(const char *path, mode_t mode, int dev_major,
> +		       int dev_minor, int should_fail)
> +{
> +	int ret;
> +
> +	unlink(path);
> +	ret = mknod(path, mode, makedev(dev_major, dev_minor));

[..]

> +	if (should_fail)
> +		ASSERT_ERR(ret, "mknod");
> +	else
> +		ASSERT_OK(ret, "mknod");

Optional: might be easier to use something like expected_ret instead
of should_fail and then do:

ASSERT_EQ(ret, expected_ret)

I see this part being copy-pasted in a bunch of places below.

> +	unlink(path);
> +}
> +
> +static void test_read(const char *path, int should_fail)
> +{
> +	char buf[TEST_BUFFER_SIZE];
> +	int ret, fd;
> +
> +	fd = open(path, O_RDONLY);
> +
> +	/* A bare open on unauthorized device should fail */
> +	if (should_fail) {
> +		ASSERT_ERR(fd, "open file for read");

[..]

> +		if (fd)
> +			close(fd);

nit: should this be 'if (fd >= 0)'? I'm assuming the intention is to
avoid close(-1)?

> +		return;
> +	}
> +
> +	if (!ASSERT_OK_FD(fd, "open file for read"))
> +		return;
> +
> +	ret = read(fd, buf, TEST_BUFFER_SIZE);
> +	if (should_fail)
> +		ASSERT_ERR(ret, "read");
> +	else
> +		ASSERT_EQ(ret, TEST_BUFFER_SIZE, "read");
> +
> +	close(fd);
> +}
> +
> +static void test_write(const char *path, int should_fail)
> +{
> +	char buf[] = "some random test data";
> +	int ret, fd;
> +
> +	fd = open(path, O_WRONLY);
> +
> +	/* A bare open on unauthorized device should fail */
> +	if (should_fail) {
> +		ASSERT_ERR(fd, "open file for write");
> +		if (fd)
> +			close(fd);

Same 'if (fd >= 0)'

  reply	other threads:[~2024-07-26 22:48 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-25 13:51 [PATCH 0/3] selftests/bpf: convert test_dev_cgroup to test_progs Alexis Lothoré (eBPF Foundation)
2024-07-25 13:51 ` [PATCH 1/3] selftests/bpf: do not disable /dev/null device access in cgroup dev test Alexis Lothoré (eBPF Foundation)
2024-07-25 13:51 ` [PATCH 2/3] selftests/bpf: convert test_dev_cgroup to test_progs Alexis Lothoré (eBPF Foundation)
2024-07-26 22:48   ` Stanislav Fomichev [this message]
2024-07-27  7:58     ` Alexis Lothoré
2024-07-25 13:51 ` [PATCH 3/3] selftests/bpf: add wrong type test to cgroup dev Alexis Lothoré (eBPF Foundation)
2024-07-26 22:49 ` [PATCH 0/3] selftests/bpf: convert test_dev_cgroup to test_progs Stanislav Fomichev
2024-07-27  8:01   ` Alexis Lothoré

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=ZqQnrxyZ1nT93PLo@mini-arch \
    --to=sdf@fomichev.me \
    --cc=alexis.lothore@bootlin.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=ebpf@linuxfoundation.org \
    --cc=eddyz87@gmail.com \
    --cc=haoluo@google.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kpsingh@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=martin.lau@linux.dev \
    --cc=mykolal@fb.com \
    --cc=shuah@kernel.org \
    --cc=song@kernel.org \
    --cc=thomas.petazzoni@bootlin.com \
    --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.