mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 08:43:19 -04:00
pfsync: Allocate and initialize buckets before attaching the interface
This prevents a potential race that the ioctl threads see NULL or uninitialized buckets. Reviewed by: kp Fixes:4fc65bcbe3pfsync: Performance improvement MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D51064 (cherry picked from commitedc307eca9)
This commit is contained in:
parent
947b6d3119
commit
99fb6da071
1 changed files with 16 additions and 17 deletions
|
|
@ -395,23 +395,6 @@ pfsync_clone_create(struct if_clone *ifc, int unit, caddr_t param)
|
|||
sc->sc_flags |= PFSYNCF_OK;
|
||||
sc->sc_maxupdates = 128;
|
||||
sc->sc_version = PFSYNC_MSG_VERSION_DEFAULT;
|
||||
|
||||
ifp = sc->sc_ifp = if_alloc(IFT_PFSYNC);
|
||||
if_initname(ifp, pfsyncname, unit);
|
||||
ifp->if_softc = sc;
|
||||
ifp->if_ioctl = pfsyncioctl;
|
||||
ifp->if_output = pfsyncoutput;
|
||||
ifp->if_hdrlen = sizeof(struct pfsync_header);
|
||||
ifp->if_mtu = ETHERMTU;
|
||||
mtx_init(&sc->sc_mtx, pfsyncname, NULL, MTX_DEF);
|
||||
mtx_init(&sc->sc_bulk_mtx, "pfsync bulk", NULL, MTX_DEF);
|
||||
callout_init_mtx(&sc->sc_bulk_tmo, &sc->sc_bulk_mtx, 0);
|
||||
callout_init_mtx(&sc->sc_bulkfail_tmo, &sc->sc_bulk_mtx, 0);
|
||||
|
||||
if_attach(ifp);
|
||||
|
||||
bpfattach(ifp, DLT_PFSYNC, PFSYNC_HDRLEN);
|
||||
|
||||
sc->sc_buckets = mallocarray(pfsync_buckets, sizeof(*sc->sc_buckets),
|
||||
M_PFSYNC, M_ZERO | M_WAITOK);
|
||||
for (c = 0; c < pfsync_buckets; c++) {
|
||||
|
|
@ -433,6 +416,22 @@ pfsync_clone_create(struct if_clone *ifc, int unit, caddr_t param)
|
|||
b->b_snd.ifq_maxlen = ifqmaxlen;
|
||||
}
|
||||
|
||||
ifp = sc->sc_ifp = if_alloc(IFT_PFSYNC);
|
||||
if_initname(ifp, pfsyncname, unit);
|
||||
ifp->if_softc = sc;
|
||||
ifp->if_ioctl = pfsyncioctl;
|
||||
ifp->if_output = pfsyncoutput;
|
||||
ifp->if_hdrlen = sizeof(struct pfsync_header);
|
||||
ifp->if_mtu = ETHERMTU;
|
||||
mtx_init(&sc->sc_mtx, pfsyncname, NULL, MTX_DEF);
|
||||
mtx_init(&sc->sc_bulk_mtx, "pfsync bulk", NULL, MTX_DEF);
|
||||
callout_init_mtx(&sc->sc_bulk_tmo, &sc->sc_bulk_mtx, 0);
|
||||
callout_init_mtx(&sc->sc_bulkfail_tmo, &sc->sc_bulk_mtx, 0);
|
||||
|
||||
if_attach(ifp);
|
||||
|
||||
bpfattach(ifp, DLT_PFSYNC, PFSYNC_HDRLEN);
|
||||
|
||||
V_pfsyncif = sc;
|
||||
|
||||
return (0);
|
||||
|
|
|
|||
Loading…
Reference in a new issue