22 Aug, 2020

1 commit

  • Initializing psock->sk_proto and other saved callbacks is only
    done in sk_psock_update_proto, after sk_psock_init has returned.
    The logic for this is difficult to follow, and needlessly complex.

    Instead, initialize psock->sk_proto whenever we allocate a new
    psock. Additionally, assert the following invariants:

    * The SK has no ULP: ULP does it's own finagling of sk->sk_prot
    * sk_user_data is unused: we need it to store sk_psock

    Protect our access to sk_user_data with sk_callback_lock, which
    is what other users like reuseport arrays, etc. do.

    The result is that an sk_psock is always fully initialized, and
    that psock->sk_proto is always the "original" struct proto.
    The latter allows us to use psock->sk_proto when initializing
    IPv6 TCP / UDP callbacks for sockmap.

    Signed-off-by: Lorenz Bauer
    Signed-off-by: Alexei Starovoitov
    Acked-by: John Fastabend
    Link: https://lore.kernel.org/bpf/20200821102948.21918-2-lmb@cloudflare.com

    Lorenz Bauer
     

10 Mar, 2020

1 commit

  • Add basic psock hooks for UDP sockets. This allows adding and
    removing sockets, as well as automatic removal on unhash and close.

    Signed-off-by: Lorenz Bauer
    Signed-off-by: Jakub Sitnicki
    Signed-off-by: Daniel Borkmann
    Acked-by: John Fastabend
    Link: https://lore.kernel.org/bpf/20200309111243.6982-8-lmb@cloudflare.com

    Lorenz Bauer