• Dave Marchevsky's avatar
    bpf: Set kptr_struct_meta for node param to list and rbtree insert funcs · 2140a6e3
    Dave Marchevsky authored
    In verifier.c, fixup_kfunc_call uses struct bpf_insn_aux_data's
    kptr_struct_meta field to pass information about local kptr types to
    various helpers and kfuncs at runtime. The recent bpf_refcount series
    added a few functions to the set that need this information:
    
      * bpf_refcount_acquire
        * Needs to know where the refcount field is in order to increment
      * Graph collection insert kfuncs: bpf_rbtree_add, bpf_list_push_{front,back}
        * Were migrated to possibly fail by the bpf_refcount series. If
          insert fails, the input node is bpf_obj_drop'd. bpf_obj_drop needs
          the kptr_struct_meta in order to decr refcount and properly free
          special fields.
    
    Unfortunately the verifier handling of collection insert kfuncs was not
    modified to actually populate kptr_struct_meta. Accordingly, when the
    node input to those kfuncs is passed to bpf_obj_drop, it is done so
    without the information necessary to decr refcount.
    
    This patch fixes the issue by populating kptr_struct_meta for those
    kfuncs.
    
    Fixes: d2dcc67d ("bpf: Migrate bpf_rbtree_add and bpf_list_push_{front,back} to possibly fail")
    Signed-off-by: default avatarDave Marchevsky <davemarchevsky@fb.com>
    Link: https://lore.kernel.org/r/20230602022647.1571784-3-davemarchevsky@fb.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    2140a6e3
verifier.c 567 KB