When traversing global in_ifaddr list in the IFP_TO_IA() macro, we need
to obtain IN_IFADDR_RLOCK().
This commit is contained in:
parent
3a3ef28e15
commit
b9abeb9d99
@ -161,14 +161,16 @@ do { \
|
|||||||
#define IFP_TO_IA(ifp, ia) \
|
#define IFP_TO_IA(ifp, ia) \
|
||||||
/* struct ifnet *ifp; */ \
|
/* struct ifnet *ifp; */ \
|
||||||
/* struct in_ifaddr *ia; */ \
|
/* struct in_ifaddr *ia; */ \
|
||||||
{ \
|
do { \
|
||||||
|
IN_IFADDR_RLOCK(); \
|
||||||
for ((ia) = TAILQ_FIRST(&V_in_ifaddrhead); \
|
for ((ia) = TAILQ_FIRST(&V_in_ifaddrhead); \
|
||||||
(ia) != NULL && (ia)->ia_ifp != (ifp); \
|
(ia) != NULL && (ia)->ia_ifp != (ifp); \
|
||||||
(ia) = TAILQ_NEXT((ia), ia_link)) \
|
(ia) = TAILQ_NEXT((ia), ia_link)) \
|
||||||
continue; \
|
continue; \
|
||||||
if ((ia) != NULL) \
|
if ((ia) != NULL) \
|
||||||
ifa_ref(&(ia)->ia_ifa); \
|
ifa_ref(&(ia)->ia_ifa); \
|
||||||
}
|
IN_IFADDR_RUNLOCK(); \
|
||||||
|
} while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user