diff --git a/sys/netlink/route/iface.c b/sys/netlink/route/iface.c --- a/sys/netlink/route/iface.c +++ b/sys/netlink/route/iface.c @@ -292,6 +292,7 @@ dump_iface(struct nl_writer *nw, if_t ifp, const struct nlmsghdr *hdr, int if_flags_mask) { + struct epoch_tracker et; struct ifinfomsg *ifinfo; NL_LOG(LOG_DEBUG3, "dumping interface %s data", if_name(ifp)); @@ -321,11 +322,14 @@ nlattr_add_u8(nw, IFLA_PROTO_DOWN, val); nlattr_add_u8(nw, IFLA_LINKMODE, val); */ - if (if_getaddrlen(ifp) != 0) { - struct ifaddr *ifa = if_getifaddr(ifp); + NET_EPOCH_ENTER(et); + if (if_getaddrlen(ifp) != 0 && + !CK_STAILQ_EMPTY(&ifp->if_addrhead)) { + struct ifaddr *ifa = ifa = CK_STAILQ_FIRST(&ifp->if_addrhead); - dump_sa(nw, IFLA_ADDRESS, ifa->ifa_addr); - } + dump_sa(nw, IFLA_ADDRESS, ifa->ifa_addr); + } + NET_EPOCH_EXIT(et); if ((if_getbroadcastaddr(ifp) != NULL)) { nlattr_add(nw, IFLA_BROADCAST, if_getaddrlen(ifp),