From a1fc2e1330c98642f81c5438892f71b8f66c025a Mon Sep 17 00:00:00 2001 From: jhb Date: Thu, 4 Aug 2005 14:39:47 +0000 Subject: Initialize the if_addr mutex in if_alloc() rather than waiting until if_attach(). This allows ethernet drivers to use it in their routines to program their MAC filters before ether_ifattach() is called (de(4) is one such driver). Also, the if_addr mutex is destroyed in if_free() rather than if_detach(), so there was another potential bug in that a driver that failed during attach and called if_free() without having called ether_ifattach() would have tried to destroy an uninitialized mutex. Reported by: Holm Tiffe holm at freibergnet dot de Discussed with: rwatson --- sys/net/if.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sys/net/if.c') diff --git a/sys/net/if.c b/sys/net/if.c index 391fe9c..b57c698 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -408,6 +408,7 @@ if_alloc(u_char type) return (NULL); } } + IF_ADDR_LOCK_INIT(ifp); return (ifp); } @@ -462,7 +463,6 @@ if_attach(struct ifnet *ifp) TASK_INIT(&ifp->if_starttask, 0, if_start_deferred, ifp); TASK_INIT(&ifp->if_linktask, 0, do_link_state_change, ifp); IF_AFDATA_LOCK_INIT(ifp); - IF_ADDR_LOCK_INIT(ifp); ifp->if_afdata_initialized = 0; IFNET_WLOCK(); TAILQ_INSERT_TAIL(&ifnet, ifp, if_link); -- cgit v1.1