Manuel Bouyer wrote:
But I don't understand how it could cause a tcp_setpersist() panic.
If I
understand it properly, we can't have TCPT_REXMT and TCPT_PERSIST
armed
at the same time. Here the path comes from TCPT_PERSIST's handler so
it was armed. Nothing arms TCPT_PERSIST outside of tcp_setpersist(),
so TCPT_REXMT has been armed after TCPT_PERSIST was.
syn_cache_get() can arm TCPT_REXMT without checking TCPT_PERSIST.
I don't know if TCPT_PERSIST could have been armed before at this
point.
I couldn't find other places where TCPT_REXMT would be armed without
checking TCPT_PERSIST.