selftests/bpf: allow requesting log level 2 in test_verifier
authorAndrii Nakryiko <andrii@kernel.org>
Wed, 5 Oct 2022 16:14:48 +0000 (09:14 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 5 Oct 2022 23:55:11 +0000 (16:55 -0700)
Log level 1 on successfully verified programs are basically equivalent
to log level 4 (stats-only), so it's useful to be able to request more
verbose logs at log level 2. Teach test_verifier to recognize -vv as
"very verbose" mode switch and use log level 2 in such mode.

Also force verifier stats regradless of -v or -vv, they are very minimal
and useful to be always emitted in verbose mode.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/r/20221005161450.1064469-1-andrii@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/test_verifier.c

index 2dbcbf3..9c70911 100644 (file)
@@ -68,7 +68,6 @@
 #define SKIP_INSNS()   BPF_RAW_INSN(0xde, 0xa, 0xd, 0xbeef, 0xdeadbeef)
 
 #define DEFAULT_LIBBPF_LOG_LEVEL       4
-#define VERBOSE_LIBBPF_LOG_LEVEL       1
 
 #define F_NEEDS_EFFICIENT_UNALIGNED_ACCESS     (1 << 0)
 #define F_LOAD_WITH_STRICT_ALIGNMENT           (1 << 1)
@@ -81,6 +80,7 @@
 static bool unpriv_disabled = false;
 static int skips;
 static bool verbose = false;
+static int verif_log_level = 0;
 
 struct kfunc_btf_id_pair {
        const char *kfunc;
@@ -759,7 +759,7 @@ static int load_btf_spec(__u32 *types, int types_len,
                    .log_buf = bpf_vlog,
                    .log_size = sizeof(bpf_vlog),
                    .log_level = (verbose
-                                 ? VERBOSE_LIBBPF_LOG_LEVEL
+                                 ? verif_log_level
                                  : DEFAULT_LIBBPF_LOG_LEVEL),
        );
 
@@ -1491,7 +1491,7 @@ static void do_test_single(struct bpf_test *test, bool unpriv,
 
        opts.expected_attach_type = test->expected_attach_type;
        if (verbose)
-               opts.log_level = VERBOSE_LIBBPF_LOG_LEVEL;
+               opts.log_level = verif_log_level | 4; /* force stats */
        else if (expected_ret == VERBOSE_ACCEPT)
                opts.log_level = 2;
        else
@@ -1746,6 +1746,13 @@ int main(int argc, char **argv)
        if (argc > 1 && strcmp(argv[1], "-v") == 0) {
                arg++;
                verbose = true;
+               verif_log_level = 1;
+               argc--;
+       }
+       if (argc > 1 && strcmp(argv[1], "-vv") == 0) {
+               arg++;
+               verbose = true;
+               verif_log_level = 2;
                argc--;
        }