]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Fix implicit automatic local port selection for IPv6 during connect calls.
authorjtl <jtl@FreeBSD.org>
Sat, 14 Nov 2020 14:50:34 +0000 (14:50 +0000)
committerjtl <jtl@FreeBSD.org>
Sat, 14 Nov 2020 14:50:34 +0000 (14:50 +0000)
commit85cd0ab850c7a32e45492848721c54af6e6c1b30
tree7239045f33874ea4ded17a2f4b495fb19b201adc
parent899ab92af8df6b845f593907d9056d41e9b18906
Fix implicit automatic local port selection for IPv6 during connect calls.

When a user creates a TCP socket and tries to connect to the socket without
explicitly binding the socket to a local address, the connect call
implicitly chooses an appropriate local port. When evaluating candidate
local ports, the algorithm checks for conflicts with existing ports by
doing a lookup in the connection hash table.

In this circumstance, both the IPv4 and IPv6 code look for exact matches
in the hash table. However, the IPv4 code goes a step further and checks
whether the proposed 4-tuple will match wildcard (e.g. TCP "listen")
entries. The IPv6 code has no such check.

The missing wildcard check can cause problems when connecting to a local
server. It is possible that the algorithm will choose the same value for
the local port as the foreign port uses. This results in a connection with
identical source and destination addresses and ports. Changing the IPv6
code to align with the IPv4 code's behavior fixes this problem.

Reviewed by: tuexen
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D27164
sys/netinet6/in6_pcb.c