• Martin KaFai Lau's avatar
    bpf: btf: Introduce BPF Type Format (BTF) · 69b693f0
    Martin KaFai Lau authored
    This patch introduces BPF type Format (BTF).
    
    BTF (BPF Type Format) is the meta data format which describes
    the data types of BPF program/map.  Hence, it basically focus
    on the C programming language which the modern BPF is primary
    using.  The first use case is to provide a generic pretty print
    capability for a BPF map.
    
    BTF has its root from CTF (Compact C-Type format).  To simplify
    the handling of BTF data, BTF removes the differences between
    small and big type/struct-member.  Hence, BTF consistently uses u32
    instead of supporting both "one u16" and "two u32 (+padding)" in
    describing type and struct-member.
    
    It also raises the number of types (and functions) limit
    from 0x7fff to 0x7fffffff.
    
    Due to the above changes,  the format is not compatible to CTF.
    Hence, BTF starts with a new BTF_MAGIC and version number.
    
    This patch does the first verification pass to the BTF.  The first
    pass checks:
    1. meta-data size (e.g. It does not go beyond the total btf's size)
    2. name_offset is valid
    3. Each BTF_KIND (e.g. int, enum, struct....) does its
       own check of its meta-data.
    
    Some other checks, like checking a struct's member is referring
    to a valid type, can only be done in the second pass.  The second
    verification pass will be implemented in the next patch.
    Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Acked-by: default avatarAlexei Starovoitov <ast@fb.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    69b693f0
btf.c 22.3 KB