Index: head/sys/net/if.c =================================================================== --- head/sys/net/if.c +++ head/sys/net/if.c @@ -1298,6 +1298,11 @@ ifindex_free_locked(ifp->if_index); IFNET_WUNLOCK(); + + /* Don't re-attach DYING interfaces. */ + if (ifp->if_flags & IFF_DYING) + return (0); + /* * Perform interface-specific reassignment tasks, if provided by * the driver. Index: head/sys/net/if_epair.c =================================================================== --- head/sys/net/if_epair.c +++ head/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