• Kumar Kartikeya Dwivedi's avatar
    bpf: Ensure type tags precede modifiers in BTF · eb596b09
    Kumar Kartikeya Dwivedi authored
    It is guaranteed that for modifiers, clang always places type tags
    before other modifiers, and then the base type. We would like to rely on
    this guarantee inside the kernel to make it simple to parse type tags
    from BTF.
    
    However, a user would be allowed to construct a BTF without such
    guarantees. Hence, add a pass to check that in modifier chains, type
    tags only occur at the head of the chain, and then don't occur later in
    the chain.
    
    If we see a type tag, we can have one or more type tags preceding other
    modifiers that then never have another type tag. If we see other
    modifiers, all modifiers following them should never be a type tag.
    
    Instead of having to walk chains we verified previously, we can remember
    the last good modifier type ID which headed a good chain. At that point,
    we must have verified all other chains headed by type IDs less than it.
    This makes the verification process less costly, and it becomes a simple
    O(n) pass.
    Signed-off-by: default avatarKumar Kartikeya Dwivedi <memxor@gmail.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Acked-by: default avatarYonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/bpf/20220419164608.1990559-2-memxor@gmail.com
    eb596b09
btf.c 190 KB