• Yonghong Song's avatar
    tools/bpf: check precise {func, line, jited_line}_info_rec_size in test_btf · 0d7410ea
    Yonghong Song authored
    Current btf func_info, line_info and jited_line are designed to be
    extensible. The record sizes for {func,line}_info are passed to kernel,
    and the record sizes for {func,line,jited_line}_info are returned to
    userspace during bpf_prog_info query.
    
    In bpf selftests test_btf.c, when testing whether kernel returns
    a legitimate {func,line, jited_line)_info rec_size, the test only
    compares to the minimum allowed size. If the returned rec_size is smaller
    than the minimum allowed size, it is considered incorrect.
    The minimum allowed size for these three info sizes are equal to
    current value of sizeof(struct bpf_func_info), sizeof(struct bpf_line_info)
    and sizeof(__u64).
    
    The original thinking was that in the future when rec_size is increased
    in kernel, the same test should run correctly. But this sacrificed
    the precision of testing under the very kernel the test is shipped with,
    and bpf selftest is typically run with the same repo kernel.
    
    So this patch changed the testing of rec_size such that the
    kernel returned value should be equal to the size defined by
    tools uapi header bpf.h which syncs with kernel uapi header.
    
    Martin discovered a bug in one of rec_size comparisons.
    Instead of comparing to minimum func_info rec_size 8, it compares to 4.
    This patch fixed that issue as well.
    
    Fixes: 999d82cb ("tools/bpf: enhance test_btf file testing to test func info")
    Fixes: 05687352 ("bpf: Refactor and bug fix in test_func_type in test_btf.c")
    Fixes: 4d6304c7 ("bpf: Add unit tests for bpf_line_info")
    Suggested-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarYonghong Song <yhs@fb.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    0d7410ea
test_btf.c 130 KB