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
This commit is contained in:
parent
6553069018
commit
6da3131abd
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user