Fix EAPOL processing when STA switches between multi-BSSes
There was an issue with EAPOL frame exchanges in a multi-BSS configuration when a station switches between the BSSes controlled by the same hostapd process. When processing the EAPOL packet, the array of virtual APs (iface->bss) is searched looking for the station that sent the packet in order to identify which signal context should be used during processing. The first match of the station in its list gets used in the ieee802_1x_receive() function. However, even after a station has disassociated, it remains in the list of stations pending an inactivity timeout. This leads to the wrong hapd context (one where the station had already disassociated) being used in some cases (if the current/active bss entry appears in the list after one where the station has just disassociated from) for EAPOL processing. Fix this by checking the WLAN_STA_ASSOC flag before assuming the right hapd context was found for the given station. Signed-hostap: David Bird <dbird@powercloudsystems.com> intended-for: hostap-1
This commit is contained in:
parent
f3989ced4f
commit
f826635c2d
1 changed files with 6 additions and 3 deletions
|
@ -672,12 +672,15 @@ static void hostapd_event_eapol_rx(struct hostapd_data *hapd, const u8 *src,
|
|||
const u8 *data, size_t data_len)
|
||||
{
|
||||
struct hostapd_iface *iface = hapd->iface;
|
||||
struct sta_info *sta;
|
||||
size_t j;
|
||||
|
||||
for (j = 0; j < iface->num_bss; j++) {
|
||||
if (ap_get_sta(iface->bss[j], src)) {
|
||||
hapd = iface->bss[j];
|
||||
break;
|
||||
if ((sta = ap_get_sta(iface->bss[j], src))) {
|
||||
if (sta->flags & WLAN_STA_ASSOC) {
|
||||
hapd = iface->bss[j];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue