From owner-svn-src-projects@FreeBSD.ORG Fri Jul 13 11:08:37 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id C0EF9106566B; Fri, 13 Jul 2012 11:08:37 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 92E598FC18; Fri, 13 Jul 2012 11:08:37 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q6DB8bEs065604; Fri, 13 Jul 2012 11:08:37 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q6DB8b5D065602; Fri, 13 Jul 2012 11:08:37 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201207131108.q6DB8b5D065602@svn.freebsd.org> From: Gleb Smirnoff Date: Fri, 13 Jul 2012 11:08:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r238421 - projects/pf/head/sys/contrib/pf/net X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Jul 2012 11:08:37 -0000 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); }