• Lorenz Bauer's avatar
    bpf: Allow specifying a BTF ID per argument in function protos · 9436ef6e
    Lorenz Bauer authored
    Function prototypes using ARG_PTR_TO_BTF_ID currently use two ways to signal
    which BTF IDs are acceptable. First, bpf_func_proto.btf_id is an array of
    IDs, one for each argument. This array is only accessed up to the highest
    numbered argument that uses ARG_PTR_TO_BTF_ID and may therefore be less than
    five arguments long. It usually points at a BTF_ID_LIST. Second, check_btf_id
    is a function pointer that is called by the verifier if present. It gets the
    actual BTF ID of the register, and the argument number we're currently checking.
    It turns out that the only user check_arg_btf_id ignores the argument, and is
    simply used to check whether the BTF ID has a struct sock_common at it's start.
    
    Replace both of these mechanisms with an explicit BTF ID for each argument
    in a function proto. Thanks to btf_struct_ids_match this is very flexible:
    check_arg_btf_id can be replaced by requiring struct sock_common.
    Signed-off-by: default avatarLorenz Bauer <lmb@cloudflare.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Link: https://lore.kernel.org/bpf/20200921121227.255763-5-lmb@cloudflare.com
    9436ef6e
bpf_inode_storage.c 6.8 KB