diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c index 407764ed263..6eb693a86ec 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_DYING)) { 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;