mac80211: fix race condition between assoc_done and first EAP packet
authorGuy Eilam <guy@wizery.com>
Wed, 17 Aug 2011 12:18:15 +0000 (15:18 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 26 Aug 2011 14:47:55 +0000 (10:47 -0400)
commit2a33bee2753bf28411de8822e3e3c7501966eb1b
treedac6419b65bdd79da56c6855bbf4a439f424e05c
parent8c71df7a2f6a5345d6cad34e810c50edeca81521
mac80211: fix race condition between assoc_done and first EAP packet

When associating to an AP, the station might miss the first EAP
packet that the AP sends due to a race condition between the association
success procedure and the rx flow in mac80211.
In such cases, the packet might fall in ieee80211_rx_h_check due to
the fact that the relevant rx->sta wasn't allocated yet.
Allocation of the relevant station info struct before actually
sending the association request and setting it with a new
dummy_sta flag solve this problem.
The station will accept only EAP packets from the AP while it
is in the pre-association/dummy state.
This dummy station entry is not seen by normal sta_info_get()
calls, only by sta_info_get_bss_rx().
The driver is not notified for the first insertion of the
dummy station. The driver is notified only after the association
is complete and the dummy flag is removed from the station entry.
That way, all the rest of the code flow should be untouched by
this change.

Signed-off-by: Guy Eilam <guy@wizery.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/mlme.c
net/mac80211/rx.c
net/mac80211/sta_info.c
net/mac80211/sta_info.h