On Tue, Mar 4, 2025 at 1:15 PM Mykyta Yatsenko <mykyta.yatsenko5@xxxxxxxxx> wrote: > > From: Mykyta Yatsenko <yatsenko@xxxxxxxx> > > Add selftests to verify that it is possible to load freplace program > from user namespace if BPF token is initialized by bpf_object__prepare > before calling bpf_program__set_attach_target. > Negative test is added as well. > > Signed-off-by: Mykyta Yatsenko <yatsenko@xxxxxxxx> > --- > .../testing/selftests/bpf/prog_tests/token.c | 94 +++++++++++++++++++ > .../selftests/bpf/progs/priv_freplace_prog.c | 13 +++ > tools/testing/selftests/bpf/progs/priv_prog.c | 4 +- > 3 files changed, 109 insertions(+), 2 deletions(-) > create mode 100644 tools/testing/selftests/bpf/progs/priv_freplace_prog.c [...] > +/* Verify that freplace works from user namespace, because bpf token is loaded > + * in bpf_object__prepare > + */ > +static int userns_obj_priv_freplace_prog(int mnt_fd, struct token_lsm *lsm_skel) > +{ > + struct priv_freplace_prog *fr_skel = NULL; > + struct priv_prog *skel = NULL; > + int err, tgt_fd; > + > + err = userns_obj_priv_freplace_setup(mnt_fd, &fr_skel, &skel, &tgt_fd); > + if (!ASSERT_OK(err, "setup")) > + goto out; > + > + err = bpf_object__prepare(fr_skel->obj); > + if (!ASSERT_OK(err, "freplace__prepare")) > + goto out; > + > + err = bpf_program__set_attach_target(fr_skel->progs.new_kprobe_prog, tgt_fd, "kprobe_prog"); > + if (err) if (!ASSERT_OK(err, "set_attach_target")) > + goto out; > + > + err = priv_freplace_prog__load(fr_skel); > + ASSERT_OK(err, "priv_freplace_prog__load"); > +out: > + priv_freplace_prog__destroy(fr_skel); > + priv_prog__destroy(skel); > + return err; > +} > + [...] > diff --git a/tools/testing/selftests/bpf/progs/priv_prog.c b/tools/testing/selftests/bpf/progs/priv_prog.c > index 3c7b2b618c8a..be9deda38b52 100644 > --- a/tools/testing/selftests/bpf/progs/priv_prog.c > +++ b/tools/testing/selftests/bpf/progs/priv_prog.c > @@ -1,5 +1,5 @@ > // SPDX-License-Identifier: GPL-2.0 > -/* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */ > +/* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */ you don't need to update copyright year when updating the file, just leave it as is here and above > > #include "vmlinux.h" > #include <bpf/bpf_helpers.h> > @@ -7,7 +7,7 @@ > char _license[] SEC("license") = "GPL"; > > SEC("kprobe") > -int kprobe_prog(void *ctx) > +int kprobe_prog(struct pt_regs *ctx) > { > return 1; > } > -- > 2.48.1 >