• Kumar Kartikeya Dwivedi's avatar
    bpf: Extend kfunc with PTR_TO_CTX, PTR_TO_MEM argument support · 3363bd0c
    Kumar Kartikeya Dwivedi authored
    Allow passing PTR_TO_CTX, if the kfunc expects a matching struct type,
    and punt to PTR_TO_MEM block if reg->type does not fall in one of
    PTR_TO_BTF_ID or PTR_TO_SOCK* types. This will be used by future commits
    to get access to XDP and TC PTR_TO_CTX, and pass various data (flags,
    l4proto, netns_id, etc.) encoded in opts struct passed as pointer to
    kfunc.
    
    For PTR_TO_MEM support, arguments are currently limited to pointer to
    scalar, or pointer to struct composed of scalars. This is done so that
    unsafe scenarios (like passing PTR_TO_MEM where PTR_TO_BTF_ID of
    in-kernel valid structure is expected, which may have pointers) are
    avoided. Since the argument checking happens basd on argument register
    type, it is not easy to ascertain what the expected type is. In the
    future, support for PTR_TO_MEM for kfunc can be extended to serve other
    usecases. The struct type whose pointer is passed in may have maximum
    nesting depth of 4, all recursively composed of scalars or struct with
    scalars.
    
    Future commits will add negative tests that check whether these
    restrictions imposed for kfunc arguments are duly rejected by BPF
    verifier or not.
    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/20211217015031.1278167-4-memxor@gmail.com
    3363bd0c
btf.c 175 KB