only skip pf once for packets that are injected by a divert-packet socket.
authordlg <dlg@openbsd.org>
Fri, 23 Apr 2021 03:29:24 +0000 (03:29 +0000)
committerdlg <dlg@openbsd.org>
Fri, 23 Apr 2021 03:29:24 +0000 (03:29 +0000)
commitc202673480ce60c9d08dcd83e1aecb53dcf67f2a
treed827fdea10d606ecec639eb4606e053684640f12
parentd460f6dc01d5b146a35aa94dd59c2e3825da9396
only skip pf once for packets that are injected by a divert-packet socket.

when a divert socket gets a packet from userland to send back through
the kernel, it marks it as diverted so pf knows not to divert it
back to userland again. this marking stuck to the packet though,
so if it went through pf again (eg, on the way out of the network
stack) pf would skip it again. this is undesirable if you want pf
to do things to the packet on this outgoing hope, such as nat.

this has pf clear the mark once it's been used, which allows the
next run of a packet through pf to have stuff work on it.

found by some people at parta networks.
ok sashan@ lteo@ bluhm@
bluhm@ also suggested keeping my diff in the same style as the rest of pf.c
sys/net/pf.c