[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <8047db0c-39eb-4b98-89e4-f0822805c309@linux.dev>
Date: Wed, 11 Sep 2024 10:33:49 -0700
From: Martin KaFai Lau <martin.lau@...ux.dev>
To: Philo Lu <lulie@...ux.alibaba.com>
Cc: bpf@...r.kernel.org, edumazet@...gle.com, rostedt@...dmis.org,
mhiramat@...nel.org, mathieu.desnoyers@...icios.com, ast@...nel.org,
daniel@...earbox.net, andrii@...nel.org, eddyz87@...il.com, song@...nel.org,
yonghong.song@...ux.dev, john.fastabend@...il.com, kpsingh@...nel.org,
sdf@...ichev.me, haoluo@...gle.com, jolsa@...nel.org, davem@...emloft.net,
kuba@...nel.org, pabeni@...hat.com, mykolal@...com, shuah@...nel.org,
mcoquelin.stm32@...il.com, alexandre.torgue@...s.st.com,
thinker.li@...il.com, juntong.deng@...look.com, jrife@...gle.com,
alan.maguire@...cle.com, davemarchevsky@...com, dxu@...uu.xyz,
vmalik@...hat.com, cupertino.miranda@...cle.com, mattbobrowski@...gle.com,
xuanzhuo@...ux.alibaba.com, netdev@...r.kernel.org,
linux-trace-kernel@...r.kernel.org
Subject: Re: [PATCH bpf-next v3 5/5] selftests/bpf: Expand skb dynptr
selftests for tp_btf
On 9/10/24 8:37 PM, Philo Lu wrote:
> Add 3 test cases for skb dynptr used in tp_btf:
> - test_dynptr_skb_tp_btf: use skb dynptr in tp_btf and make sure it is
> read-only.
> - skb_invalid_ctx_fentry/skb_invalid_ctx_fexit: bpf_dynptr_from_skb
> should fail in fentry/fexit.
>
> In test_dynptr_skb_tp_btf, to trigger the tracepoint in kfree_skb,
> test_pkt_access is used for its test_run, as in kfree_skb.c. Because the
> test process is different from others, a new setup type is defined,
> i.e., SETUP_SKB_PROG_TP.
>
> The result is like:
> $ ./test_progs -t 'dynptr/test_dynptr_skb_tp_btf'
> #84/14 dynptr/test_dynptr_skb_tp_btf:OK
> #84 dynptr:OK
> #127 kfunc_dynptr_param:OK
> Summary: 2/1 PASSED, 0 SKIPPED, 0 FAILED
>
> $ ./test_progs -t 'dynptr/skb_invalid_ctx_f'
> #84/85 dynptr/skb_invalid_ctx_fentry:OK
> #84/86 dynptr/skb_invalid_ctx_fexit:OK
> #84 dynptr:OK
> #127 kfunc_dynptr_param:OK
> Summary: 2/2 PASSED, 0 SKIPPED, 0 FAILED
>
> Also fix two coding style nits (change spaces to tabs).
>
> Signed-off-by: Philo Lu <lulie@...ux.alibaba.com>
> ---
> .../testing/selftests/bpf/prog_tests/dynptr.c | 36 +++++++++++++++++--
> .../testing/selftests/bpf/progs/dynptr_fail.c | 25 +++++++++++++
> .../selftests/bpf/progs/dynptr_success.c | 23 ++++++++++++
> 3 files changed, 82 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/prog_tests/dynptr.c b/tools/testing/selftests/bpf/prog_tests/dynptr.c
> index 7cfac53c0d58d..ba40be8b1c4ef 100644
> --- a/tools/testing/selftests/bpf/prog_tests/dynptr.c
> +++ b/tools/testing/selftests/bpf/prog_tests/dynptr.c
> @@ -9,6 +9,7 @@
> enum test_setup_type {
> SETUP_SYSCALL_SLEEP,
> SETUP_SKB_PROG,
> + SETUP_SKB_PROG_TP,
> };
>
> static struct {
> @@ -28,6 +29,7 @@ static struct {
> {"test_dynptr_clone", SETUP_SKB_PROG},
> {"test_dynptr_skb_no_buff", SETUP_SKB_PROG},
> {"test_dynptr_skb_strcmp", SETUP_SKB_PROG},
> + {"test_dynptr_skb_tp_btf", SETUP_SKB_PROG_TP},
> };
>
> static void verify_success(const char *prog_name, enum test_setup_type setup_type)
> @@ -35,7 +37,7 @@ static void verify_success(const char *prog_name, enum test_setup_type setup_typ
> struct dynptr_success *skel;
> struct bpf_program *prog;
> struct bpf_link *link;
> - int err;
> + int err;
>
> skel = dynptr_success__open();
> if (!ASSERT_OK_PTR(skel, "dynptr_success__open"))
> @@ -47,7 +49,7 @@ static void verify_success(const char *prog_name, enum test_setup_type setup_typ
> if (!ASSERT_OK_PTR(prog, "bpf_object__find_program_by_name"))
> goto cleanup;
>
> - bpf_program__set_autoload(prog, true);
> + bpf_program__set_autoload(prog, true);
>
> err = dynptr_success__load(skel);
> if (!ASSERT_OK(err, "dynptr_success__load"))
> @@ -87,6 +89,36 @@ static void verify_success(const char *prog_name, enum test_setup_type setup_typ
>
> break;
> }
> + case SETUP_SKB_PROG_TP:
> + {
> + struct __sk_buff skb = {};
> + struct bpf_object *obj;
> + int aux_prog_fd;
> +
> + /* Just use its test_run to trigger kfree_skb tracepoint */
> + err = bpf_prog_test_load("./test_pkt_access.bpf.o", BPF_PROG_TYPE_SCHED_CLS,
> + &obj, &aux_prog_fd);
> + if (!ASSERT_OK(err, "prog_load sched cls"))
> + goto cleanup;
> +
> + LIBBPF_OPTS(bpf_test_run_opts, topts,
> + .data_in = &pkt_v4,
> + .data_size_in = sizeof(pkt_v4),
> + .ctx_in = &skb,
> + .ctx_size_in = sizeof(skb),
> + );
> +
> + link = bpf_program__attach(prog);
> + if (!ASSERT_OK_PTR(link, "bpf_program__attach"))
> + goto cleanup;
> +
> + err = bpf_prog_test_run_opts(aux_prog_fd, &topts);
bpf_link__destroy(link) is needed. I fixed it and applied. Thanks.
> +
> + if (!ASSERT_OK(err, "test_run"))
> + goto cleanup;
> +
> + break;
> + }
> }
Powered by blists - more mailing lists