On Wed, Apr 7, 2021 at 4:22 AM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > Adding test to verify that once we attach module's trampoline, > the module can't be unloaded. > > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > --- To be fair, to test that you are actually testing what you think you are testing, you'd have to prove that you *can* detach when no program is attached to bpf_testmod ;) You'd also need kern_sync_rcu() to wait for all the async clean up to complete inside the kernel. But that doesn't interact with other tests well, so I think it's fine. grumpily due to CHECK() usage (please do consider updating to ASSERT): Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > .../selftests/bpf/prog_tests/module_attach.c | 23 +++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/tools/testing/selftests/bpf/prog_tests/module_attach.c b/tools/testing/selftests/bpf/prog_tests/module_attach.c > index 5bc53d53d86e..d180b8c28287 100644 > --- a/tools/testing/selftests/bpf/prog_tests/module_attach.c > +++ b/tools/testing/selftests/bpf/prog_tests/module_attach.c > @@ -45,12 +45,18 @@ static int trigger_module_test_write(int write_sz) > return 0; > } > > +static int delete_module(const char *name, int flags) > +{ > + return syscall(__NR_delete_module, name, flags); > +} > + > void test_module_attach(void) > { > const int READ_SZ = 456; > const int WRITE_SZ = 457; > struct test_module_attach* skel; > struct test_module_attach__bss *bss; > + struct bpf_link *link; > int err; > > skel = test_module_attach__open(); > @@ -84,6 +90,23 @@ void test_module_attach(void) > ASSERT_EQ(bss->fexit_ret, -EIO, "fexit_tet"); > ASSERT_EQ(bss->fmod_ret_read_sz, READ_SZ, "fmod_ret"); > > + test_module_attach__detach(skel); > + > + /* attach fentry/fexit and make sure it get's module reference */ > + link = bpf_program__attach(skel->progs.handle_fentry); > + if (CHECK(IS_ERR(link), "attach_fentry", "err: %ld\n", PTR_ERR(link))) > + goto cleanup; > + > + ASSERT_ERR(delete_module("bpf_testmod", 0), "delete_module"); > + bpf_link__destroy(link); > + > + link = bpf_program__attach(skel->progs.handle_fexit); > + if (CHECK(IS_ERR(link), "attach_fexit", "err: %ld\n", PTR_ERR(link))) > + goto cleanup; > + > + ASSERT_ERR(delete_module("bpf_testmod", 0), "delete_module"); > + bpf_link__destroy(link); > + > cleanup: > test_module_attach__destroy(skel); > } > -- > 2.30.2 >