• Craig Gallek's avatar
    soreuseport: Prep for fast reuseport TCP socket selection · fa463497
    Craig Gallek authored
    Both of the lines in this patch probably should have been included
    in the initial implementation of this code for generic socket
    support, but weren't technically necessary since only UDP sockets
    were supported.
    
    First, the sk_reuseport_cb points to a structure which assumes
    each socket in the group has this pointer assigned at the same
    time it's added to the array in the structure.  The sk_clone_lock
    function breaks this assumption.  Since a child socket shouldn't
    implicitly be in a reuseport group, the simple fix is to clear
    the field in the clone.
    
    Second, the SO_ATTACH_REUSEPORT_xBPF socket options require that
    SO_REUSEPORT also be set first.  For UDP sockets, this is easily
    enforced at bind-time since that process both puts the socket in
    the appropriate receive hlist and updates the reuseport structures.
    Since these operations can happen at two different times for TCP
    sockets (bind and listen) it must be explicitly checked to enforce
    the use of SO_REUSEPORT with SO_ATTACH_REUSEPORT_xBPF in the
    setsockopt call.
    Signed-off-by: default avatarCraig Gallek <kraig@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    fa463497
sock.c 73.7 KB