On Mon, Nov 8, 2021 at 10:48 PM Dmitrii Banshchikov <me@xxxxxxxxxxxxx> wrote: > > On Mon, Nov 08, 2021 at 08:46:20PM +0400, Dmitrii Banshchikov wrote: > > This patch adds tests that bpf_ktime_get_coarse_ns() and bpf_timer_* and > > bpf_spin_lock()/bpf_spin_unlock() helpers are forbidden in tracing > > progs as it may result in various locking issues. > > > > Signed-off-by: Dmitrii Banshchikov <me@xxxxxxxxxxxxx> > > --- > > tools/testing/selftests/bpf/test_verifier.c | 36 +++- > > .../selftests/bpf/verifier/helper_allowed.c | 196 ++++++++++++++++++ > > 2 files changed, 231 insertions(+), 1 deletion(-) > > create mode 100644 tools/testing/selftests/bpf/verifier/helper_allowed.c > > > > diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c > > index 25afe423b3f0..e16eab6fc3a9 100644 > > --- a/tools/testing/selftests/bpf/test_verifier.c > > +++ b/tools/testing/selftests/bpf/test_verifier.c > > @@ -92,6 +92,7 @@ struct bpf_test { > > int fixup_map_event_output[MAX_FIXUPS]; > > int fixup_map_reuseport_array[MAX_FIXUPS]; > > int fixup_map_ringbuf[MAX_FIXUPS]; > > + int fixup_map_timer[MAX_FIXUPS]; > > /* Expected verifier log output for result REJECT or VERBOSE_ACCEPT. > > * Can be a tab-separated sequence of expected strings. An empty string > > * means no log verification. > > @@ -605,7 +606,7 @@ static int create_cgroup_storage(bool percpu) > > * struct bpf_spin_lock l; > > * }; > > */ > > -static const char btf_str_sec[] = "\0bpf_spin_lock\0val\0cnt\0l"; > > +static const char btf_str_sec[] = "\0bpf_spin_lock\0val\0cnt\0l\0bpf_timer\0"; > > There is extra null byte at the end. Won't hurt, probably. But I wonder if it will be much easier to add all those programs as C code and test from test_progs? Instead of all this assembly. You can put all of them into a single file and have loop that disabled all but one program at a time (using bpf_program__set_autoload()) and loading it and validating that the load failed. WDYT? > > > -- > > Dmitrii Banshchikov