View | Details | Raw Unified | Return to bug 187381 | Differences between
and this patch

Collapse All | Expand All

(-)if_pfsync.c (-15 / +26 lines)
Lines 402-407 static int Link Here
402
pfsync_state_import(struct pfsync_state *sp, u_int8_t flags)
402
pfsync_state_import(struct pfsync_state *sp, u_int8_t flags)
403
{
403
{
404
	struct pfsync_softc *sc = V_pfsyncif;
404
	struct pfsync_softc *sc = V_pfsyncif;
405
#ifndef	__NO_STRICT_ALIGNMENT
406
	struct pfsync_state_key key[2];
407
#endif
408
	struct pfsync_state_key *kw, *ks;
405
	struct pf_state	*st = NULL;
409
	struct pf_state	*st = NULL;
406
	struct pf_state_key *skw = NULL, *sks = NULL;
410
	struct pf_state_key *skw = NULL, *sks = NULL;
407
	struct pf_rule *r = NULL;
411
	struct pf_rule *r = NULL;
Lines 451-462 pfsync_state_import(struct pfsync_state *sp, u_int Link Here
451
	if ((skw = uma_zalloc(V_pf_state_key_z, M_NOWAIT)) == NULL)
455
	if ((skw = uma_zalloc(V_pf_state_key_z, M_NOWAIT)) == NULL)
452
		goto cleanup;
456
		goto cleanup;
453
457
454
	if (PF_ANEQ(&sp->key[PF_SK_WIRE].addr[0],
458
#ifndef	__NO_STRICT_ALIGNMENT
455
	    &sp->key[PF_SK_STACK].addr[0], sp->af) ||
459
	bcopy(&sp->key, key, sizeof(struct pfsync_state_key) * 2);
456
	    PF_ANEQ(&sp->key[PF_SK_WIRE].addr[1],
460
	kw = &key[PF_SK_WIRE];
457
	    &sp->key[PF_SK_STACK].addr[1], sp->af) ||
461
	ks = &key[PF_SK_STACK];
458
	    sp->key[PF_SK_WIRE].port[0] != sp->key[PF_SK_STACK].port[0] ||
462
#else
459
	    sp->key[PF_SK_WIRE].port[1] != sp->key[PF_SK_STACK].port[1]) {
463
	kw = &sp->key[PF_SK_WIRE];
464
	ks = &sp->key[PF_SK_STACK];
465
#endif
466
467
	if (PF_ANEQ(&kw->addr[0], &ks->addr[0], sp->af) ||
468
	    PF_ANEQ(&kw->addr[1], &ks->addr[1], sp->af) ||
469
	    kw->port[0] != ks->port[0] ||
470
	    kw->port[1] != ks->port[1]) {
460
		sks = uma_zalloc(V_pf_state_key_z, M_NOWAIT);
471
		sks = uma_zalloc(V_pf_state_key_z, M_NOWAIT);
461
		if (sks == NULL)
472
		if (sks == NULL)
462
			goto cleanup;
473
			goto cleanup;
Lines 468-485 pfsync_state_import(struct pfsync_state *sp, u_int Link Here
468
	    pfsync_alloc_scrub_memory(&sp->dst, &st->dst))
479
	    pfsync_alloc_scrub_memory(&sp->dst, &st->dst))
469
		goto cleanup;
480
		goto cleanup;
470
481
471
	/* copy to state key(s) */
482
	/* Copy to state key(s). */
472
	skw->addr[0] = sp->key[PF_SK_WIRE].addr[0];
483
	skw->addr[0] = kw->addr[0];
473
	skw->addr[1] = sp->key[PF_SK_WIRE].addr[1];
484
	skw->addr[1] = kw->addr[1];
474
	skw->port[0] = sp->key[PF_SK_WIRE].port[0];
485
	skw->port[0] = kw->port[0];
475
	skw->port[1] = sp->key[PF_SK_WIRE].port[1];
486
	skw->port[1] = kw->port[1];
476
	skw->proto = sp->proto;
487
	skw->proto = sp->proto;
477
	skw->af = sp->af;
488
	skw->af = sp->af;
478
	if (sks != skw) {
489
	if (sks != skw) {
479
		sks->addr[0] = sp->key[PF_SK_STACK].addr[0];
490
		sks->addr[0] = ks->addr[0];
480
		sks->addr[1] = sp->key[PF_SK_STACK].addr[1];
491
		sks->addr[1] = ks->addr[1];
481
		sks->port[0] = sp->key[PF_SK_STACK].port[0];
492
		sks->port[0] = ks->port[0];
482
		sks->port[1] = sp->key[PF_SK_STACK].port[1];
493
		sks->port[1] = ks->port[1];
483
		sks->proto = sp->proto;
494
		sks->proto = sp->proto;
484
		sks->af = sp->af;
495
		sks->af = sp->af;
485
	}
496
	}

Return to bug 187381