• Stanislav Fomichev's avatar
    bpf: support input __sk_buff context in BPF_PROG_TEST_RUN · b0b9395d
    Stanislav Fomichev authored
    Add new set of arguments to bpf_attr for BPF_PROG_TEST_RUN:
    * ctx_in/ctx_size_in - input context
    * ctx_out/ctx_size_out - output context
    
    The intended use case is to pass some meta data to the test runs that
    operate on skb (this has being brought up on recent LPC).
    
    For programs that use bpf_prog_test_run_skb, support __sk_buff input and
    output. Initially, from input __sk_buff, copy _only_ cb and priority into
    skb, all other non-zero fields are prohibited (with EINVAL).
    If the user has set ctx_out/ctx_size_out, copy the potentially modified
    __sk_buff back to the userspace.
    
    We require all fields of input __sk_buff except the ones we explicitly
    support to be set to zero. The expectation is that in the future we might
    add support for more fields and we want to fail explicitly if the user
    runs the program on the kernel where we don't yet support them.
    
    The API is intentionally vague (i.e. we don't explicitly add __sk_buff
    to bpf_attr, but ctx_in) to potentially let other test_run types use
    this interface in the future (this can be xdp_md for xdp types for
    example).
    
    v4:
      * don't copy more than allowed in bpf_ctx_init [Martin]
    
    v3:
      * handle case where ctx_in is NULL, but ctx_out is not [Martin]
      * convert size==0 checks to ptr==NULL checks and add some extra ptr
        checks [Martin]
    
    v2:
      * Addressed comments from Martin Lau
    Signed-off-by: default avatarStanislav Fomichev <sdf@google.com>
    Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    b0b9395d
syscall.c 66.1 KB