git: c5c7dd3971bb - stable/12 - pf: fix error-case leaks in pf_create_state

Mateusz Guzik mjg at FreeBSD.org
Mon Jul 5 12:02:00 UTC 2021


The branch stable/12 has been updated by mjg:

URL: https://cgit.FreeBSD.org/src/commit/?id=c5c7dd3971bb88e75ae4e13e7d2df4f935e6b4f1

commit c5c7dd3971bb88e75ae4e13e7d2df4f935e6b4f1
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:37:59 +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 ec27b6ee0ace..c131e9493ea8 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -3828,7 +3828,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;
@@ -3850,7 +3850,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 &&
@@ -3860,10 +3860,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);
 		}
 	}
@@ -3887,12 +3886,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-branches mailing list