--- b/sys/net/if.c +++ b/sys/net/if.c @@ -1187,7 +1187,6 @@ if_detach_internal(struct ifnet *ifp, int vmove, struct if_clone **ifcp) */ free(ifp->if_hw_addr, M_IFADDR); ifp->if_hw_addr = NULL; - ifp->if_addr = NULL; /* We can now free link ifaddr. */ IF_ADDR_WLOCK(ifp); --- b/sys/net/rtsock.c +++ b/sys/net/rtsock.c @@ -1566,7 +1566,7 @@ sysctl_dumpentry(struct radix_node *rn, void *vw) info.rti_info[RTAX_NETMASK] = rtsock_fix_netmask(rt_key(rt), rt_mask(rt), &ss); info.rti_info[RTAX_GENMASK] = 0; - if (rt->rt_ifp) { + if (rt->rt_ifp && (rt->rt_ifp->if_flags & IFF_UP)) { info.rti_info[RTAX_IFP] = rt->rt_ifp->if_addr->ifa_addr; info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr; if (rt->rt_ifp->if_flags & IFF_POINTOPOINT) @@ -1921,9 +1921,11 @@ sysctl_rtsock(SYSCTL_HANDLER_ARGS) for (error = 0; error == 0 && i <= lim; i++) { rnh = rt_tables_get_rnh(fib, i); if (rnh != NULL) { - RIB_RLOCK(rnh); - error = rnh->rnh_walktree(&rnh->head, + RIB_RLOCK(rnh); + NET_EPOCH_ENTER(); + error = rnh->rnh_walktree(&rnh->head, sysctl_dumpentry, &w); + NET_EPOCH_EXIT(); RIB_RUNLOCK(rnh); } else if (af != 0) error = EAFNOSUPPORT;