Set inp address, port and rtable together with inpcb hash.
authorbluhm <bluhm@openbsd.org>
Fri, 1 Dec 2023 15:30:46 +0000 (15:30 +0000)
committerbluhm <bluhm@openbsd.org>
Fri, 1 Dec 2023 15:30:46 +0000 (15:30 +0000)
commitcd28665a485085cced1f2ddbb04be43bbf0c9855
tree45367850ca2d24d4b24c90275653f9cf84c28648
parentdbbcd4cdc26765f533befbbe5501bb7dd14c097d
Set inp address, port and rtable together with inpcb hash.

The inpcb hash table is protected by table->inpt_mtx.  The hash is
based on addresses, ports, and routing table.  These fields were
not sychronized with the hash.  Put writes and hash update into the
same critical section.
Move the updates from ip_ctloutput(), ip6_ctloutput(), syn_cache_get(),
tcp_connect(), udp_disconnect() to dedicated inpcb set functions.
There they use the same table mutex as in_pcbrehash().
in_pcbbind(), in_pcbconnect(), and in6_pcbconnect() need more work
and are not included yet.

OK sashan@ mvs@
sys/netinet/in_pcb.c
sys/netinet/in_pcb.h
sys/netinet/ip_output.c
sys/netinet/tcp_input.c
sys/netinet/tcp_usrreq.c
sys/netinet/udp_usrreq.c
sys/netinet6/in6_pcb.c
sys/netinet6/ip6_output.c