Problem Description:
Connected sockets are not intended to belong to load-balancing
groups. However, the kernel failed to check the connection state
of sockets when adding them to load-balancing groups. Furthermore,
when looking up the destination socket for an incoming packet, the
kernel will match a socket belonging to a load-balancing group even
if it is connected.
Connected sockets are only supposed to receive packets originating
from the connected host. The above behavior violates this contract.
Impact:
Software which sets SO_REUSEPORT_LB on a socket and then connects
it to a host will not observe any problems. However, due to its
membership in a load-balancing group, that socket will receive
packets originating from any host. This breaks the contract of the
connect(2) and implied connect via sendto(2), and may leave the
application vulnerable to spoofing attacks.