• Kumar Kartikeya Dwivedi's avatar
    bpf: Tag argument to be released in bpf_func_proto · 8f14852e
    Kumar Kartikeya Dwivedi authored
    Add a new type flag for bpf_arg_type that when set tells verifier that
    for a release function, that argument's register will be the one for
    which meta.ref_obj_id will be set, and which will then be released
    using release_reference. To capture the regno, introduce a new field
    release_regno in bpf_call_arg_meta.
    
    This would be required in the next patch, where we may either pass NULL
    or a refcounted pointer as an argument to the release function
    bpf_kptr_xchg. Just releasing only when meta.ref_obj_id is set is not
    enough, as there is a case where the type of argument needed matches,
    but the ref_obj_id is set to 0. Hence, we must enforce that whenever
    meta.ref_obj_id is zero, the register that is to be released can only
    be NULL for a release function.
    
    Since we now indicate whether an argument is to be released in
    bpf_func_proto itself, is_release_function helper has lost its utitlity,
    hence refactor code to work without it, and just rely on
    meta.release_regno to know when to release state for a ref_obj_id.
    Still, the restriction of one release argument and only one ref_obj_id
    passed to BPF helper or kfunc remains. This may be lifted in the future.
    Signed-off-by: default avatarKumar Kartikeya Dwivedi <memxor@gmail.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20220424214901.2743946-3-memxor@gmail.com
    8f14852e
sock.c 21.7 KB