All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrii Nakryiko <andrii.nakryiko@gmail.com>
To: Jiri Olsa <jolsa@kernel.org>
Cc: Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Andrii Nakryiko <andriin@fb.com>,
	Wenbo Zhang <ethercflow@gmail.com>,
	Networking <netdev@vger.kernel.org>, bpf <bpf@vger.kernel.org>,
	Song Liu <songliubraving@fb.com>, Yonghong Song <yhs@fb.com>,
	Martin KaFai Lau <kafai@fb.com>, David Miller <davem@redhat.com>,
	John Fastabend <john.fastabend@gmail.com>,
	KP Singh <kpsingh@chromium.org>,
	Brendan Gregg <bgregg@netflix.com>,
	Florent Revest <revest@chromium.org>,
	Al Viro <viro@zeniv.linux.org.uk>
Subject: Re: [PATCH v8 bpf-next 12/13] selftests/bpf: Add test for d_path helper
Date: Tue, 28 Jul 2020 12:53:00 -0700	[thread overview]
Message-ID: <CAEf4BzYTT23knreKpxPDLeWcLzTVQhtBrRPjrZ+MBpL4ajeavw@mail.gmail.com> (raw)
In-Reply-To: <20200722211223.1055107-13-jolsa@kernel.org>

On Wed, Jul 22, 2020 at 2:14 PM Jiri Olsa <jolsa@kernel.org> wrote:
>
> Adding test for d_path helper which is pretty much
> copied from Wenbo Zhang's test for bpf_get_fd_path,
> which never made it in.
>
> The test is doing fstat/close on several fd types,
> and verifies we got the d_path helper working on
> kernel probes for vfs_getattr/filp_close functions.
>
> Original-patch-by: Wenbo Zhang <ethercflow@gmail.com>
> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> ---
>  .../testing/selftests/bpf/prog_tests/d_path.c | 162 ++++++++++++++++++
>  .../testing/selftests/bpf/progs/test_d_path.c |  64 +++++++
>  2 files changed, 226 insertions(+)
>  create mode 100644 tools/testing/selftests/bpf/prog_tests/d_path.c
>  create mode 100644 tools/testing/selftests/bpf/progs/test_d_path.c
>
> diff --git a/tools/testing/selftests/bpf/prog_tests/d_path.c b/tools/testing/selftests/bpf/prog_tests/d_path.c
> new file mode 100644
> index 000000000000..3b8f87fb17d7
> --- /dev/null
> +++ b/tools/testing/selftests/bpf/prog_tests/d_path.c
> @@ -0,0 +1,162 @@
> +// SPDX-License-Identifier: GPL-2.0
> +#define _GNU_SOURCE
> +#include <test_progs.h>
> +#include <sys/stat.h>
> +#include <linux/sched.h>
> +#include <sys/syscall.h>
> +
> +#define MAX_PATH_LEN           128
> +#define MAX_FILES              7
> +#define MAX_EVENT_NUM          16
> +
> +#include "test_d_path.skel.h"
> +
> +static struct {
> +       __u32 cnt;
> +       char paths[MAX_EVENT_NUM][MAX_PATH_LEN];
> +} src;
> +
> +static int set_pathname(int fd, pid_t pid)
> +{
> +       char buf[MAX_PATH_LEN];
> +
> +       snprintf(buf, MAX_PATH_LEN, "/proc/%d/fd/%d", pid, fd);
> +       return readlink(buf, src.paths[src.cnt++], MAX_PATH_LEN);
> +}
> +
> +static int trigger_fstat_events(pid_t pid)
> +{
> +       int sockfd = -1, procfd = -1, devfd = -1;
> +       int localfd = -1, indicatorfd = -1;
> +       int pipefd[2] = { -1, -1 };
> +       struct stat fileStat;
> +       int ret = -1;
> +
> +       /* unmountable pseudo-filesystems */
> +       if (CHECK_FAIL(pipe(pipefd) < 0))
> +               return ret;
> +       /* unmountable pseudo-filesystems */
> +       sockfd = socket(AF_INET, SOCK_STREAM, 0);
> +       if (CHECK_FAIL(sockfd < 0))
> +               goto out_close;
> +       /* mountable pseudo-filesystems */
> +       procfd = open("/proc/self/comm", O_RDONLY);
> +       if (CHECK_FAIL(procfd < 0))
> +               goto out_close;
> +       devfd = open("/dev/urandom", O_RDONLY);
> +       if (CHECK_FAIL(devfd < 0))
> +               goto out_close;
> +       localfd = open("/tmp/d_path_loadgen.txt", O_CREAT | O_RDONLY);
> +       if (CHECK_FAIL(localfd < 0))
> +               goto out_close;
> +       /* bpf_d_path will return path with (deleted) */
> +       remove("/tmp/d_path_loadgen.txt");
> +       indicatorfd = open("/tmp/", O_PATH);
> +       if (CHECK_FAIL(indicatorfd < 0))
> +               goto out_close;
> +
> +       ret = set_pathname(pipefd[0], pid);
> +       if (CHECK_FAIL(ret < 0))
> +               goto out_close;
> +       ret = set_pathname(pipefd[1], pid);
> +       if (CHECK_FAIL(ret < 0))
> +               goto out_close;
> +       ret = set_pathname(sockfd, pid);
> +       if (CHECK_FAIL(ret < 0))
> +               goto out_close;
> +       ret = set_pathname(procfd, pid);
> +       if (CHECK_FAIL(ret < 0))
> +               goto out_close;
> +       ret = set_pathname(devfd, pid);
> +       if (CHECK_FAIL(ret < 0))
> +               goto out_close;
> +       ret = set_pathname(localfd, pid);
> +       if (CHECK_FAIL(ret < 0))
> +               goto out_close;
> +       ret = set_pathname(indicatorfd, pid);
> +       if (CHECK_FAIL(ret < 0))
> +               goto out_close;

Please use CHECK instead of CHECK_FAIL. Thanks.

> +
> +       /* triggers vfs_getattr */
> +       fstat(pipefd[0], &fileStat);
> +       fstat(pipefd[1], &fileStat);
> +       fstat(sockfd, &fileStat);
> +       fstat(procfd, &fileStat);
> +       fstat(devfd, &fileStat);
> +       fstat(localfd, &fileStat);
> +       fstat(indicatorfd, &fileStat);
> +
> +out_close:
> +       /* triggers filp_close */
> +       close(pipefd[0]);
> +       close(pipefd[1]);
> +       close(sockfd);
> +       close(procfd);
> +       close(devfd);
> +       close(localfd);
> +       close(indicatorfd);
> +       return ret;
> +}
> +

[...]

> diff --git a/tools/testing/selftests/bpf/progs/test_d_path.c b/tools/testing/selftests/bpf/progs/test_d_path.c
> new file mode 100644
> index 000000000000..e02dce614256
> --- /dev/null
> +++ b/tools/testing/selftests/bpf/progs/test_d_path.c
> @@ -0,0 +1,64 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +#include "vmlinux.h"
> +#include <bpf/bpf_helpers.h>
> +#include <bpf/bpf_tracing.h>
> +
> +#define MAX_PATH_LEN           128
> +#define MAX_EVENT_NUM          16
> +
> +pid_t my_pid;
> +__u32 cnt_stat;
> +__u32 cnt_close;
> +char paths_stat[MAX_EVENT_NUM][MAX_PATH_LEN];
> +char paths_close[MAX_EVENT_NUM][MAX_PATH_LEN];
> +int rets_stat[MAX_EVENT_NUM];
> +int rets_close[MAX_EVENT_NUM];
> +

please zero-initialize all of these, it causes issues on some Clang versions

[...]

  reply	other threads:[~2020-07-28 19:53 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-22 21:12 [PATCH v8 bpf-next 00/13] bpf: Add d_path helper Jiri Olsa
2020-07-22 21:12 ` [PATCH v8 bpf-next 01/13] selftests/bpf: Fix resolve_btfids test Jiri Olsa
2020-07-28 20:27   ` Andrii Nakryiko
2020-07-29 20:06     ` Jiri Olsa
2020-07-29 21:38       ` Andrii Nakryiko
2020-07-22 21:12 ` [PATCH v8 bpf-next 02/13] tools resolve_btfids: Add support for set symbols Jiri Olsa
2020-07-28  0:53   ` Andrii Nakryiko
2020-07-28  9:35     ` Jiri Olsa
2020-07-22 21:12 ` [PATCH v8 bpf-next 03/13] bpf: Move btf_resolve_size into __btf_resolve_size Jiri Olsa
2020-07-28 20:29   ` Andrii Nakryiko
2020-07-22 21:12 ` [PATCH v8 bpf-next 04/13] bpf: Add elem_id pointer as argument to __btf_resolve_size Jiri Olsa
2020-07-28 20:30   ` Andrii Nakryiko
2020-07-22 21:12 ` [PATCH v8 bpf-next 05/13] bpf: Add type_id " Jiri Olsa
2020-07-22 21:12 ` [PATCH v8 bpf-next 06/13] bpf: Factor btf_struct_access function Jiri Olsa
2020-07-28 23:27   ` Andrii Nakryiko
2020-07-29 15:59     ` Jiri Olsa
2020-07-22 21:12 ` [PATCH v8 bpf-next 07/13] bpf: Add btf_struct_ids_match function Jiri Olsa
2020-07-28 23:35   ` Andrii Nakryiko
2020-07-29 16:04     ` Jiri Olsa
2020-07-29 17:51       ` Andrii Nakryiko
2020-07-29 18:55         ` Jiri Olsa
2020-07-22 21:12 ` [PATCH v8 bpf-next 08/13] bpf: Add BTF_SET_START/END macros Jiri Olsa
2020-07-28 19:39   ` Andrii Nakryiko
2020-07-29 11:54     ` Jiri Olsa
2020-07-22 21:12 ` [PATCH v8 bpf-next 09/13] bpf: Add d_path helper Jiri Olsa
2020-07-28 19:47   ` Andrii Nakryiko
2020-07-29 15:54     ` Jiri Olsa
2020-07-29 20:11   ` Al Viro
2020-07-30 10:22     ` Jiri Olsa
2020-07-29 20:17   ` Al Viro
2020-07-30 10:09     ` Jiri Olsa
2020-07-22 21:12 ` [PATCH v8 bpf-next 10/13] bpf: Update .BTF_ids section in btf.rst with sets info Jiri Olsa
2020-07-22 21:12 ` [PATCH v8 bpf-next 11/13] selftests/bpf: Add verifier test for d_path helper Jiri Olsa
2020-07-28 19:49   ` Andrii Nakryiko
2020-07-22 21:12 ` [PATCH v8 bpf-next 12/13] selftests/bpf: Add " Jiri Olsa
2020-07-28 19:53   ` Andrii Nakryiko [this message]
2020-07-29 11:25     ` Jiri Olsa
2020-07-22 21:12 ` [PATCH v8 bpf-next 13/13] selftests/bpf: Add set test to resolve_btfids Jiri Olsa
2020-07-28 19:56   ` Andrii Nakryiko
2020-07-29 15:34     ` Jiri Olsa

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=CAEf4BzYTT23knreKpxPDLeWcLzTVQhtBrRPjrZ+MBpL4ajeavw@mail.gmail.com \
    --to=andrii.nakryiko@gmail.com \
    --cc=andriin@fb.com \
    --cc=ast@kernel.org \
    --cc=bgregg@netflix.com \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=davem@redhat.com \
    --cc=ethercflow@gmail.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kafai@fb.com \
    --cc=kpsingh@chromium.org \
    --cc=netdev@vger.kernel.org \
    --cc=revest@chromium.org \
    --cc=songliubraving@fb.com \
    --cc=viro@zeniv.linux.org.uk \
    --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.