• Yonghong Song's avatar
    bpf: fix bpffs bitfield pretty print · 17e3ac81
    Yonghong Song authored
    Commit 9d5f9f70 ("bpf: btf: fix struct/union/fwd types
    with kind_flag") introduced kind_flag and used bitfield_size
    in the btf_member to directly pretty print member values.
    
    The commit contained a bug where the incorrect parameters could be
    passed to function btf_bitfield_seq_show(). The bits_offset
    parameter in the function expects a value less than 8.
    Instead, the member offset in the structure is passed.
    
    The below is btf_bitfield_seq_show() func signature:
      void btf_bitfield_seq_show(void *data, u8 bits_offset,
                                 u8 nr_bits, struct seq_file *m)
    both bits_offset and nr_bits are u8 type. If the bitfield
    member offset is greater than 256, incorrect value will
    be printed.
    
    This patch fixed the issue by calculating correct proper
    data offset and bits_offset similar to non kind_flag case.
    
    Fixes: 9d5f9f70 ("bpf: btf: fix struct/union/fwd types with kind_flag")
    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>
    17e3ac81
btf.c 74.8 KB