diff --git a/sys/net/if_ipsec.c b/sys/net/if_ipsec.c --- a/sys/net/if_ipsec.c +++ b/sys/net/if_ipsec.c @@ -1017,6 +1017,8 @@ struct epoch_tracker et; struct secpolicy *sp[IPSEC_SPCOUNT]; int i; + u_int family = src->sa_family; + struct secasindex *saidx; sx_assert(&ipsec_ioctl_sx, SA_XLOCKED); @@ -1032,8 +1034,9 @@ ipsec_delete_tunnel(sc); for (i = 0; i < IPSEC_SPCOUNT; i++) sc->sp[i] = sp[i]; - sc->family = src->sa_family; - CK_LIST_INSERT_HEAD(ipsec_srchash(src), sc, srchash); + sc->family = family; + saidx = ipsec_getsaidx(sc, IPSEC_DIR_OUTBOUND, sc->family); + CK_LIST_INSERT_HEAD(ipsec_srchash(&saidx->src.sa), sc, srchash); } else { sc->ifp->if_drv_flags &= ~IFF_DRV_RUNNING; return (ENOMEM);