• Jakub Sitnicki's avatar
    selftests/bpf: Test unhashing kTLS socket after removing from map · d1ba1204
    Jakub Sitnicki authored
    When a TCP socket gets inserted into a sockmap, its sk_prot callbacks get
    replaced with tcp_bpf callbacks built from regular tcp callbacks. If TLS
    gets enabled on the same socket, sk_prot callbacks get replaced once again,
    this time with kTLS callbacks built from tcp_bpf callbacks.
    
    Now, we allow removing a socket from a sockmap that has kTLS enabled. After
    removal, socket remains with kTLS configured. This is where things things
    get tricky.
    
    Since the socket has a set of sk_prot callbacks that are a mix of kTLS and
    tcp_bpf callbacks, we need to restore just the tcp_bpf callbacks to the
    original ones. At the moment, it comes down to the the unhash operation.
    
    We had a regression recently because tcp_bpf callbacks were not cleared in
    this particular scenario of removing a kTLS socket from a sockmap. It got
    fixed in commit 4da6a196 ("bpf: Sockmap/tls, during free we may call
    tcp_bpf_unhash() in loop").
    
    Add a test that triggers the regression so that we don't reintroduce it in
    the future.
    Signed-off-by: default avatarJakub Sitnicki <jakub@cloudflare.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20200217121530.754315-4-jakub@cloudflare.com
    d1ba1204
sockmap_ktls.c 2.44 KB