Index: sys/net/if.c =================================================================== --- sys/net/if.c +++ sys/net/if.c @@ -1305,6 +1305,10 @@ if (ifp->if_reassign != NULL) ifp->if_reassign(ifp, new_vnet, NULL); + /* Don't re-attach DYING interfaces. */ + if (ifp->if_flags & IFF_DYING) + return (0); + /* * Switch to the context of the target vnet. */ Index: sys/net/if_epair.c =================================================================== --- sys/net/if_epair.c +++ sys/net/if_epair.c @@ -611,8 +611,14 @@ struct epair_softc *sc; sc = ifp->if_softc; - KASSERT(sc != NULL, ("%s: ifp=%p, epair_softc gone? sc=%p\n", - __func__, ifp, sc)); + + /* + * See epair_clone_destroy(), we can end up getting called twice. + * Don't do anything on the second call. + */ + if (sc == NULL) + return; + /* * Remove this ifp from all backpointer lists. The interface will not * usable for flushing anyway nor should it have anything to flush