Close all pf transactions before opening a new one in DIOCGETRULES.
authorclaudio <claudio@openbsd.org>
Mon, 26 Jun 2023 07:49:48 +0000 (07:49 +0000)
committerclaudio <claudio@openbsd.org>
Mon, 26 Jun 2023 07:49:48 +0000 (07:49 +0000)
commitbc25482273e20358a0986a64a86a5586a415f488
tree4f6cabe83726ab07bd5079257f7d6d93cc0ae8a7
parentf0daa7d1e104b2b007027f1295bb04e6bd80b6fd
Close all pf transactions before opening a new one in DIOCGETRULES.

Processes like snmpd or systat open pf(4) once and then issue many
DIOCGETRULES calls over their runtime. This accumulates many pf_trans
structs over their lifetime. At some point the kernel runs out of
memory because of that. By closing all transactions before creating
a new one, long living processes do no longer leak transactions.

This probably needs further refinement once more transactions types are
added but for now this solves the problem.

Problem found by florian@
OK sashan@ kn@
sys/net/pf_ioctl.c
sys/net/rtsock.c