From 636d3aa68f5379759a09f7b4f36f38e1aeee3a45 Mon Sep 17 00:00:00 2001 From: glebius Date: Wed, 18 Jul 2012 08:41:00 +0000 Subject: [PATCH] When traversing global in_ifaddr list in the IFP_TO_IA() macro, we need to obtain IN_IFADDR_RLOCK(). --- sys/netinet/in_var.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/netinet/in_var.h b/sys/netinet/in_var.h index 26803d92a23c..976b3f77bf85 100644 --- a/sys/netinet/in_var.h +++ b/sys/netinet/in_var.h @@ -161,14 +161,16 @@ do { \ #define IFP_TO_IA(ifp, ia) \ /* struct ifnet *ifp; */ \ /* struct in_ifaddr *ia; */ \ -{ \ +do { \ + IN_IFADDR_RLOCK(); \ for ((ia) = TAILQ_FIRST(&V_in_ifaddrhead); \ (ia) != NULL && (ia)->ia_ifp != (ifp); \ (ia) = TAILQ_NEXT((ia), ia_link)) \ continue; \ if ((ia) != NULL) \ ifa_ref(&(ia)->ia_ifa); \ -} + IN_IFADDR_RUNLOCK(); \ +} while (0) #endif /*