try to avoid a deadlock between sec_down and sec_send.
authordlg <dlg@openbsd.org>
Tue, 8 Aug 2023 10:14:29 +0000 (10:14 +0000)
committerdlg <dlg@openbsd.org>
Tue, 8 Aug 2023 10:14:29 +0000 (10:14 +0000)
commite2ace5e53c443884629c14b9c2f46f1cb5ff48aa
tree919f26ffb22e623860067379e79116af3b6fd634
parente49f856682359d0ed329d7ddeed406cd19fe0680
try to avoid a deadlock between sec_down and sec_send.

sec_send runs in the systq (because it calls ipsec stuff which uses
crypto, which is not mpsafe) and takes the net lock (because ipsec
output calls ip_output and other stuff). sec_down is called with
NET_LOCK held and tries to run a barrier for send task. if the send
task is running but is waiting for the net lock while sec_down is
holding the net lock while waiting for the task to finish, we're
deadlocked.

this copies the sc_up thing from pfsync, which hopefuly avoids this.

pointed out by mvs@
sys/net/if_sec.c