• Dave Marchevsky's avatar
    bpf: Consider all mem_types compatible for map_{key,value} args · d1673304
    Dave Marchevsky authored
    After the previous patch, which added PTR_TO_MEM | MEM_ALLOC type
    map_key_value_types, the only difference between map_key_value_types and
    mem_types sets is PTR_TO_BUF and PTR_TO_MEM, which are in the latter set
    but not the former.
    
    Helpers which expect ARG_PTR_TO_MAP_KEY or ARG_PTR_TO_MAP_VALUE
    already effectively expect a valid blob of arbitrary memory that isn't
    necessarily explicitly associated with a map. When validating a
    PTR_TO_MAP_{KEY,VALUE} arg, the verifier expects meta->map_ptr to have
    already been set, either by an earlier ARG_CONST_MAP_PTR arg, or custom
    logic like that in process_timer_func or process_kptr_func.
    
    So let's get rid of map_key_value_types and just use mem_types for those
    args.
    
    This has the effect of adding PTR_TO_BUF and PTR_TO_MEM to the set of
    compatible types for ARG_PTR_TO_MAP_KEY and ARG_PTR_TO_MAP_VALUE.
    
    PTR_TO_BUF is used by various bpf_iter implementations to represent a
    chunk of valid r/w memory in ctx args for iter prog.
    
    PTR_TO_MEM is used by networking, tracing, and ringbuf helpers to
    represent a chunk of valid memory. The PTR_TO_MEM | MEM_ALLOC
    type added in previous commit is specific to ringbuf helpers.
    Presence or absence of MEM_ALLOC doesn't change the validity of using
    PTR_TO_MEM as a map_{key,val} input.
    Signed-off-by: default avatarDave Marchevsky <davemarchevsky@fb.com>
    Acked-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20221020160721.4030492-2-davemarchevsky@fb.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    d1673304
verifier.c 438 KB