bpf: allow to specify log level and reduce it for test_verifier
authorDaniel Borkmann <daniel@iogearbox.net>
Thu, 20 Jul 2017 22:00:22 +0000 (00:00 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 20 Jul 2017 22:20:27 +0000 (15:20 -0700)
For the test_verifier case, it's quite hard to parse log level 2 to
figure out what's causing an issue when used to log level 1. We do
want to use bpf_verify_program() in order to simulate some of the
tests with strict alignment. So just add an argument to pass the level
and put it to 1 for test_verifier.

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/lib/bpf/bpf.c
tools/lib/bpf/bpf.h
tools/testing/selftests/bpf/test_align.c
tools/testing/selftests/bpf/test_verifier.c

index 7e0405e1651d23ea80b2f000495e199a561eca72..412a7c82995ae1cb595f6eb1637703ae8a1a359b 100644 (file)
@@ -120,7 +120,7 @@ int bpf_load_program(enum bpf_prog_type type, const struct bpf_insn *insns,
 int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns,
                       size_t insns_cnt, int strict_alignment,
                       const char *license, __u32 kern_version,
-                      char *log_buf, size_t log_buf_sz)
+                      char *log_buf, size_t log_buf_sz, int log_level)
 {
        union bpf_attr attr;
 
@@ -131,7 +131,7 @@ int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns,
        attr.license = ptr_to_u64(license);
        attr.log_buf = ptr_to_u64(log_buf);
        attr.log_size = log_buf_sz;
-       attr.log_level = 2;
+       attr.log_level = log_level;
        log_buf[0] = 0;
        attr.kern_version = kern_version;
        attr.prog_flags = strict_alignment ? BPF_F_STRICT_ALIGNMENT : 0;
index 16de44a14b48706886ef77e37abed2bafa8e8fc1..418c86e69bcbfae71d93d07c7054afa08b149c18 100644 (file)
@@ -38,7 +38,7 @@ int bpf_load_program(enum bpf_prog_type type, const struct bpf_insn *insns,
 int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns,
                       size_t insns_cnt, int strict_alignment,
                       const char *license, __u32 kern_version,
-                      char *log_buf, size_t log_buf_sz);
+                      char *log_buf, size_t log_buf_sz, int log_level);
 
 int bpf_map_update_elem(int fd, const void *key, const void *value,
                        __u64 flags);
index bccebd935907a894afbe835f6ea480131559b9ea..29793694cbc79c3efeb100fed07df8930ec5e62c 100644 (file)
@@ -380,7 +380,7 @@ static int do_test_single(struct bpf_align_test *test)
        prog_len = probe_filter_length(prog);
        fd_prog = bpf_verify_program(prog_type ? : BPF_PROG_TYPE_SOCKET_FILTER,
                                     prog, prog_len, 1, "GPL", 0,
-                                    bpf_vlog, sizeof(bpf_vlog));
+                                    bpf_vlog, sizeof(bpf_vlog), 2);
        if (fd_prog < 0) {
                printf("Failed to load program.\n");
                printf("%s", bpf_vlog);
index 404aec5208128101812f6c9189ed046d1ec6eb24..f4d0a1de392532e7fd0ebafbb991a453b6bdf3f5 100644 (file)
@@ -5633,7 +5633,7 @@ static void do_test_single(struct bpf_test *test, bool unpriv,
 
        fd_prog = bpf_verify_program(prog_type ? : BPF_PROG_TYPE_SOCKET_FILTER,
                                     prog, prog_len, test->flags & F_LOAD_WITH_STRICT_ALIGNMENT,
-                                    "GPL", 0, bpf_vlog, sizeof(bpf_vlog));
+                                    "GPL", 0, bpf_vlog, sizeof(bpf_vlog), 1);
 
        expected_ret = unpriv && test->result_unpriv != UNDEF ?
                       test->result_unpriv : test->result;