net80211: fix panic when device is removed during initialization

if_dead() is called during device detach - check if interface is
still exists before trying to refresh vap MAC address
(IF_LLADDR will trigger page fault otherwise).

MFC after:	5 days
This commit is contained in:
avos 2019-01-09 12:50:24 +00:00
parent 633df669ff
commit 026e13f590

View File

@ -3537,9 +3537,13 @@ ieee80211_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
/*
* Check if the MAC address was changed
* via SIOCSIFLLADDR ioctl.
*
* NB: device may be detached during initialization;
* use if_ioctl for existence check.
*/
if_addr_rlock(ifp);
if ((ifp->if_flags & IFF_UP) == 0 &&
if (ifp->if_ioctl == ieee80211_ioctl &&
(ifp->if_flags & IFF_UP) == 0 &&
!IEEE80211_ADDR_EQ(vap->iv_myaddr, IF_LLADDR(ifp)))
IEEE80211_ADDR_COPY(vap->iv_myaddr,
IF_LLADDR(ifp));