Introduce reference counting for TCP syn cache entries.
authorbluhm <bluhm@openbsd.org>
Mon, 28 Aug 2023 14:50:01 +0000 (14:50 +0000)
committerbluhm <bluhm@openbsd.org>
Mon, 28 Aug 2023 14:50:01 +0000 (14:50 +0000)
commita1744ce2a1c5c8a9c633cb01945266a3b1c4df75
treefa7c2348b27edfa7f4e1b1dd484b2c9339284bb0
parent2cc1e2eb2f0d80089f33b4b02f26b4bc3d2b4a7f
Introduce reference counting for TCP syn cache entries.

The syn_cache_reaper() is a hack to serialize timeouts.  Unfortunately
it has a race and panics sometimes with pool_do_get: syncache free
list modified.  Add a reference counter for timeout and list of syn
cache entries.  Currently list refcout is not strictly necessary
due to exclusive netlock, but will be needed when we continue
unlocking.

Checking timeout_initialized() is not MP friendly, better do proper
initialization during object allocation.  Refcount in btrace helps
to find leaks.

bug reported and fix tested by Peter J. Philipp
OK claudio@
sys/dev/dt/dt_prov_static.c
sys/netinet/tcp_input.c
sys/netinet/tcp_var.h
sys/sys/refcnt.h