Date: Fri, 13 Jul 2012 11:08:37 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r238421 - projects/pf/head/sys/contrib/pf/net Message-ID: <201207131108.q6DB8b5D065602@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: glebius Date: Fri Jul 13 11:08:37 2012 New Revision: 238421 URL: http://svn.freebsd.org/changeset/base/238421 Log: Remove UMA init method for key zone, and instead do all initialization after uma_zalloc(). If a key was first allocated for IPv6 state, then freed and reallocated for IPv4, then we'd got non-zero values in not used for IPv4 fields, this bcmp() would fail on key lookup. Reported & tested by: flo Modified: projects/pf/head/sys/contrib/pf/net/pf.c Modified: projects/pf/head/sys/contrib/pf/net/pf.c ============================================================================== --- projects/pf/head/sys/contrib/pf/net/pf.c Fri Jul 13 09:43:45 2012 (r238420) +++ projects/pf/head/sys/contrib/pf/net/pf.c Fri Jul 13 11:08:37 2012 (r238421) @@ -259,7 +259,6 @@ static void pf_detach_state(struct pf_ static int pf_state_key_attach(struct pf_state_key *, struct pf_state_key *, struct pf_state *); static void pf_state_key_detach(struct pf_state *, int); -static int pf_state_key_ini(void *, int, int); static u_int32_t pf_tcp_iss(struct pf_pdesc *); static int pf_test_rule(struct pf_rule **, struct pf_state **, int, struct pfi_kif *, struct mbuf *, int, @@ -740,7 +739,7 @@ pf_initialize() uma_zone_set_max(V_pf_state_z, PFSTATE_HIWAT); V_pf_state_key_z = uma_zcreate("pf state keys", - sizeof(struct pf_state_key), NULL, NULL, pf_state_key_ini, NULL, + sizeof(struct pf_state_key), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); V_pf_keyhash = malloc(V_pf_hashsize * sizeof(struct pf_keyhash), M_PFHASH, M_WAITOK | M_ZERO); @@ -1043,24 +1042,13 @@ pf_state_key_detach(struct pf_state *s, } } -static int -pf_state_key_ini(void *mem, int size, int flags) -{ - struct pf_state_key *sk = mem; - - bzero(sk, sizeof(*sk)); - TAILQ_INIT(&sk->states[PF_SK_WIRE]); - TAILQ_INIT(&sk->states[PF_SK_STACK]); - return (0); -} - struct pf_state_key * pf_state_key_setup(struct pf_pdesc *pd, struct pf_addr *saddr, struct pf_addr *daddr, u_int16_t sport, u_int16_t dport) { struct pf_state_key *sk; - sk = uma_zalloc(V_pf_state_key_z, M_NOWAIT); + sk = uma_zalloc(V_pf_state_key_z, M_ZERO | M_NOWAIT); if (sk == NULL) return (NULL); @@ -1071,6 +1059,9 @@ pf_state_key_setup(struct pf_pdesc *pd, sk->proto = pd->proto; sk->af = pd->af; + TAILQ_INIT(&sk->states[PF_SK_WIRE]); + TAILQ_INIT(&sk->states[PF_SK_STACK]); + return (sk); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201207131108.q6DB8b5D065602>