Index: sys/netinet/in.c =================================================================== --- sys/netinet/in.c +++ sys/netinet/in.c @@ -936,6 +936,7 @@ { register struct ifaddr *ifa; u_long t; + int found = 0; if (in.s_addr == INADDR_BROADCAST || in.s_addr == INADDR_ANY) @@ -948,6 +949,7 @@ * with a broadcast address. */ #define ia ((struct in_ifaddr *)ifa) + if_addr_rlock(ifp); TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) if (ifa->ifa_addr->sa_family == AF_INET && (in.s_addr == ia->ia_broadaddr.sin_addr.s_addr || @@ -962,9 +964,12 @@ * only exist when an interface gets a secondary * address. */ - ia->ia_subnetmask != (u_long)0xffffffff) - return (1); - return (0); + ia->ia_subnetmask != (u_long)0xffffffff) { + found = 1; + break; + } + if_addr_runlock(ifp); + return (found); #undef ia }