[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAMB2axOoFbgQsEeLqdtpfWY=4g7yCxO19t8orxa5Ao6gNTXiDQ@mail.gmail.com>
Date: Thu, 23 Jan 2025 16:04:32 -0800
From: Amery Hung <ameryhung@...il.com>
To: Eduard Zingerman <eddyz87@...il.com>
Cc: netdev@...r.kernel.org, bpf@...r.kernel.org, daniel@...earbox.net,
andrii@...nel.org, alexei.starovoitov@...il.com, martin.lau@...nel.org,
sinquersw@...il.com, toke@...hat.com, jhs@...atatu.com, jiri@...nulli.us,
stfomichev@...il.com, ekarani.silvestre@....ufcg.edu.br,
yangpeihao@...u.edu.cn, xiyou.wangcong@...il.com, yepeilin.cs@...il.com,
amery.hung@...edance.com
Subject: Re: [PATCH bpf-next v2 02/14] selftests/bpf: Test referenced kptr
arguments of struct_ops programs
On Thu, Jan 23, 2025 at 1:57 AM Eduard Zingerman <eddyz87@...il.com> wrote:
>
> On Fri, 2024-12-20 at 11:55 -0800, Amery Hung wrote:
>
> Reviewed-by: Eduard Zingerman <eddyz87@...il.com>
>
> [...]
>
> > diff --git a/tools/testing/selftests/bpf/progs/struct_ops_refcounted_fail__global_subprog.c b/tools/testing/selftests/bpf/progs/struct_ops_refcounted_fail__global_subprog.c
> > new file mode 100644
> > index 000000000000..43493a7ead39
> > --- /dev/null
> > +++ b/tools/testing/selftests/bpf/progs/struct_ops_refcounted_fail__global_subprog.c
> > @@ -0,0 +1,37 @@
> > +#include <vmlinux.h>
> > +#include <bpf/bpf_tracing.h>
> > +#include "../test_kmods/bpf_testmod.h"
> > +#include "bpf_misc.h"
> > +
> > +char _license[] SEC("license") = "GPL";
> > +
> > +extern void bpf_task_release(struct task_struct *p) __ksym;
> > +
> > +__noinline int subprog_release(__u64 *ctx __arg_ctx)
> > +{
> > + struct task_struct *task = (struct task_struct *)ctx[1];
> > + int dummy = (int)ctx[0];
> > +
> > + bpf_task_release(task);
> > +
> > + return dummy + 1;
> > +}
> > +
> > +/* Test that the verifier rejects a program that contains a global
> > + * subprogram with referenced kptr arguments
> > + */
> > +SEC("struct_ops/test_refcounted")
>
> Nit: I'd add a __msg("Validating subprog_release() func#1...")
> before the error message match, just to make sure that
> error is reported when subprog_release() is verified.
>
I see. I will add the msg match.
> > +__failure __msg("invalid bpf_context access off=8. Reference may already be released")
> > +int refcounted_fail__global_subprog(unsigned long long *ctx)
> > +{
> > + struct task_struct *task = (struct task_struct *)ctx[1];
> > +
> > + bpf_task_release(task);
> > +
> > + return subprog_release(ctx);
> > +}
> > +
> > +SEC(".struct_ops.link")
> > +struct bpf_testmod_ops testmod_ref_acquire = {
> > + .test_refcounted = (void *)refcounted_fail__global_subprog,
> > +};
>
> [...]
>
Powered by blists - more mailing lists