• A
    selftests/bpf: Selftest for sys_bind hooks · e50b0a6f
    Andrey Ignatov 提交于
    Add selftest to work with bpf_sock_addr context from
    `BPF_PROG_TYPE_CGROUP_SOCK_ADDR` programs.
    
    Try to bind(2) on IP:port and apply:
    * loads to make sure context can be read correctly, including narrow
      loads (byte, half) for IP and full-size loads (word) for all fields;
    * stores to those fields allowed by verifier.
    
    All combination from IPv4/IPv6 and TCP/UDP are tested.
    
    Both scenarios are tested:
    * valid programs can be loaded and attached;
    * invalid programs can be neither loaded nor attached.
    
    Test passes when expected data can be read from context in the
    BPF-program, and after the call to bind(2) socket is bound to IP:port
    pair that was written by BPF-program to the context.
    
    Example:
      # ./test_sock_addr
      Attached bind4 program.
      Test case #1 (IPv4/TCP):
              Requested: bind(192.168.1.254, 4040) ..
                 Actual: bind(127.0.0.1, 4444)
      Test case #2 (IPv4/UDP):
              Requested: bind(192.168.1.254, 4040) ..
                 Actual: bind(127.0.0.1, 4444)
      Attached bind6 program.
      Test case #3 (IPv6/TCP):
              Requested: bind(face:b00c:1234:5678::abcd, 6060) ..
                 Actual: bind(::1, 6666)
      Test case #4 (IPv6/UDP):
              Requested: bind(face:b00c:1234:5678::abcd, 6060) ..
                 Actual: bind(::1, 6666)
      ### SUCCESS
    Signed-off-by: NAndrey Ignatov <rdna@fb.com>
    Signed-off-by: NAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
    e50b0a6f
bpf.h 35.8 KB