git: 3fbf56f319f5 - stable/13 - pf: fix error-case leaks in pf_create_state
Mateusz Guzik
mjg at FreeBSD.org
Mon Jul 5 11:33:51 UTC 2021
The branch stable/13 has been updated by mjg:
URL: https://cgit.FreeBSD.org/src/commit/?id=3fbf56f319f5cf01a6ed0a904499e996d7660f5d
commit 3fbf56f319f5cf01a6ed0a904499e996d7660f5d
Author: Mateusz Guzik <mjg at FreeBSD.org>
AuthorDate: 2021-06-28 18:29:58 +0000
Commit: Mateusz Guzik <mjg at FreeBSD.org>
CommitDate: 2021-07-05 11:32:11 +0000
pf: fix error-case leaks in pf_create_state
The hand-rolled clean up failed to free counters.
Reviewed by: kp
Sponsored by: Rubicon Communications, LLC ("Netgate")
(cherry picked from commit 7f025db57c7879bfa43ac74ecd95903439fdd1d0)
---
sys/netpfil/pf/pf.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index 53489f5f0113..3afb54dbab17 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -3827,7 +3827,7 @@ pf_create_state(struct pf_krule *r, struct pf_krule *nr, struct pf_krule *a,
REASON_SET(&reason, PFRES_MAPFAILED);
pf_src_tree_remove_state(s);
STATE_DEC_COUNTERS(s);
- uma_zfree(V_pf_state_z, s);
+ pf_free_state(s);
goto csfailed;
}
s->rt_kif = r->rpool.cur->kif;
@@ -3849,7 +3849,7 @@ pf_create_state(struct pf_krule *r, struct pf_krule *nr, struct pf_krule *a,
REASON_SET(&reason, PFRES_MEMORY);
pf_src_tree_remove_state(s);
STATE_DEC_COUNTERS(s);
- uma_zfree(V_pf_state_z, s);
+ pf_free_state(s);
return (PF_DROP);
}
if ((pd->flags & PFDESC_TCP_NORM) && s->src.scrub &&
@@ -3859,10 +3859,9 @@ pf_create_state(struct pf_krule *r, struct pf_krule *nr, struct pf_krule *a,
DPFPRINTF(PF_DEBUG_URGENT,
("pf_normalize_tcp_stateful failed on first "
"pkt\n"));
- pf_normalize_tcp_cleanup(s);
pf_src_tree_remove_state(s);
STATE_DEC_COUNTERS(s);
- uma_zfree(V_pf_state_z, s);
+ pf_free_state(s);
return (PF_DROP);
}
}
@@ -3886,12 +3885,10 @@ pf_create_state(struct pf_krule *r, struct pf_krule *nr, struct pf_krule *a,
if (pf_state_insert(BOUND_IFACE(r, kif), kif,
(pd->dir == PF_IN) ? sk : nk,
(pd->dir == PF_IN) ? nk : sk, s)) {
- if (pd->proto == IPPROTO_TCP)
- pf_normalize_tcp_cleanup(s);
REASON_SET(&reason, PFRES_STATEINS);
pf_src_tree_remove_state(s);
STATE_DEC_COUNTERS(s);
- uma_zfree(V_pf_state_z, s);
+ pf_free_state(s);
return (PF_DROP);
} else
*sm = s;
More information about the dev-commits-src-all
mailing list