• Dave Marchevsky's avatar
    bpf: Remove anonymous union in bpf_kfunc_call_arg_meta · 4d585f48
    Dave Marchevsky authored
    For kfuncs like bpf_obj_drop and bpf_refcount_acquire - which take
    user-defined types as input - the verifier needs to track the specific
    type passed in when checking a particular kfunc call. This requires
    tracking (btf, btf_id) tuple. In commit 7c50b1cb
    ("bpf: Add bpf_refcount_acquire kfunc") I added an anonymous union with
    inner structs named after the specific kfuncs tracking this information,
    with the goal of making it more obvious which kfunc this data was being
    tracked / expected to be tracked on behalf of.
    
    In a recent series adding a new user of this tuple, Alexei mentioned
    that he didn't like this union usage as it doesn't really help with
    readability or bug-proofing ([0]). In an offline convo we agreed to
    have the tuple be fields (arg_btf, arg_btf_id), with comments in
    bpf_kfunc_call_arg_meta definition enumerating the uses of the fields by
    kfunc-specific handling logic. Such a pattern is used by struct
    bpf_reg_state without trouble.
    
    Accordingly, this patch removes the anonymous union in favor of arg_btf
    and arg_btf_id fields and comment enumerating their current uses. The
    patch also removes struct btf_and_id, which was only being used by the
    removed union's inner structs.
    
    This is a mechanical change, existing linked_list and rbtree tests will
    validate that correct (btf, btf_id) are being passed.
    
      [0]: https://lore.kernel.org/bpf/20230505021707.vlyiwy57vwxglbka@dhcp-172-26-102-232.dhcp.thefacebook.comSigned-off-by: default avatarDave Marchevsky <davemarchevsky@fb.com>
    Link: https://lore.kernel.org/r/20230510213047.1633612-1-davemarchevsky@fb.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    4d585f48
verifier.c 567 KB