• Andrey Ignatov's avatar
    selftests/bpf: Selftest for sys_bind hooks · e50b0a6f
    Andrey Ignatov authored
    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: default avatarAndrey Ignatov <rdna@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    e50b0a6f
Name
Last commit
Last update
..
api Loading commit data...
bpf Loading commit data...
lockdep Loading commit data...
subcmd Loading commit data...
symbol Loading commit data...
traceevent Loading commit data...
bitmap.c Loading commit data...
find_bit.c Loading commit data...
hweight.c Loading commit data...
rbtree.c Loading commit data...
str_error_r.c Loading commit data...
string.c Loading commit data...
vsprintf.c Loading commit data...