diff --git a/sys/net/if.c b/sys/net/if.c index 15b4d7c12d1..fcc882aec26 100644 --- a/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); diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c index 407764ed263..8f504647461 100644 --- a/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;