• Yonghong Song's avatar
    bpf: Add tests for PTR_TO_BTF_ID vs. null comparison · d923021c
    Yonghong Song authored
    Add two tests for PTR_TO_BTF_ID vs. null ptr comparison,
    one for PTR_TO_BTF_ID in the ctx structure and the
    other for PTR_TO_BTF_ID after one level pointer chasing.
    In both cases, the test ensures condition is not
    removed.
    
    For example, for this test
     struct bpf_fentry_test_t {
         struct bpf_fentry_test_t *a;
     };
     int BPF_PROG(test7, struct bpf_fentry_test_t *arg)
     {
         if (arg == 0)
             test7_result = 1;
         return 0;
     }
    Before the previous verifier change, we have xlated codes:
      int test7(long long unsigned int * ctx):
      ; int BPF_PROG(test7, struct bpf_fentry_test_t *arg)
         0: (79) r1 = *(u64 *)(r1 +0)
      ; int BPF_PROG(test7, struct bpf_fentry_test_t *arg)
         1: (b4) w0 = 0
         2: (95) exit
    After the previous verifier change, we have:
      int test7(long long unsigned int * ctx):
      ; int BPF_PROG(test7, struct bpf_fentry_test_t *arg)
         0: (79) r1 = *(u64 *)(r1 +0)
      ; if (arg == 0)
         1: (55) if r1 != 0x0 goto pc+4
      ; test7_result = 1;
         2: (18) r1 = map[id:6][0]+48
         4: (b7) r2 = 1
         5: (7b) *(u64 *)(r1 +0) = r2
      ; int BPF_PROG(test7, struct bpf_fentry_test_t *arg)
         6: (b4) w0 = 0
         7: (95) exit
    Signed-off-by: default avatarYonghong Song <yhs@fb.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
    Acked-by: default avatarAndrii Nakryiko <andriin@fb.com>
    Link: https://lore.kernel.org/bpf/20200630171241.2523875-1-yhs@fb.com
    d923021c
test_run.c 14.8 KB