]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
MFC r343213:
authoravos <avos@FreeBSD.org>
Sun, 27 Jan 2019 13:03:48 +0000 (13:03 +0000)
committeravos <avos@FreeBSD.org>
Sun, 27 Jan 2019 13:03:48 +0000 (13:03 +0000)
commitfb15aa03c6b93156f76ded253b5db93b1efd8614
tree77c34c0f96cf1c5c83c768e635562b4d157f9803
parent396ce8497cb2ae7eed1e297d7edf3396759eaca1
MFC r343213:
net80211: resolve ioctl <-> detach race for ieee80211com structure

Since r287197 ieee80211com is a part of drivers softc; as a result,
after detach all pointers to it (iv_ic, ni_ic) are invalid. Most
possible users (tasks, interrupt handlers) are blocked / removed
when device is stopped; however, ioctl handlers were not tracked
and may crash if ieee80211com structure is accessed.

Since ieee80211com pointer access from ieee80211vap structure is not
protected by lock (constant after interface creation) and used in
many other places just use reference counting for ioctl handlers;
on detach set 'detached' flag and wait until reference counter goes to 0.

For KBI stability the last element of iv_spare[] array was reused.
sys/net80211/ieee80211.c
sys/net80211/ieee80211_freebsd.c
sys/net80211/ieee80211_freebsd.h
sys/net80211/ieee80211_ioctl.c
sys/net80211/ieee80211_var.h