• Dave Marchevsky's avatar
    bpf: Cleanup check_refcount_ok · b2d8ef19
    Dave Marchevsky authored
    Discussion around a recently-submitted patch provided historical
    context for check_refcount_ok [0]. Specifically, the function and its
    helpers - may_be_acquire_function and arg_type_may_be_refcounted -
    predate the OBJ_RELEASE type flag and the addition of many more helpers
    with acquire/release semantics.
    
    The purpose of check_refcount_ok is to ensure:
      1) Helper doesn't have multiple uses of return reg's ref_obj_id
      2) Helper with release semantics only has one arg needing to be
      released, since that's tracked using meta->ref_obj_id
    
    With current verifier, it's safe to remove check_refcount_ok and its
    helpers. Since addition of OBJ_RELEASE type flag, case 2) has been
    handled by the arg_type_is_release check in check_func_arg. To ensure
    case 1) won't result in verifier silently prioritizing one use of
    ref_obj_id, this patch adds a helper_multiple_ref_obj_use check which
    fails loudly if a helper passes > 1 test for use of ref_obj_id.
    
      [0]: lore.kernel.org/bpf/20220713234529.4154673-1-davemarchevsky@fb.com
    Signed-off-by: default avatarDave Marchevsky <davemarchevsky@fb.com>
    Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Acked-by: default avatarJoanne Koong <joannelkoong@gmail.com>
    Acked-by: default avatarKumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20220808171559.3251090-1-davemarchevsky@fb.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    b2d8ef19
verifier.c 437 KB