wpa_auth: Deplete group rekey eloop handler for strict rekeying
When strict group rekeying is in effect, every station that leaves will cause a rekeying to happen 0.5 s after leaving. However, if a lot of stations join/leave, the previous code could postpone this rekeying forever, since it always re-registers the handling with a 0.5 s timeout. Use eloop_deplete_timeout() to address that, only registering the timeout from scratch if it wasn't pending. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
257ad53c1d
commit
3f5a1860a8
1 changed files with 4 additions and 3 deletions
|
@ -698,9 +698,10 @@ void wpa_auth_sta_deinit(struct wpa_state_machine *sm)
|
||||||
wpa_auth_logger(sm->wpa_auth, sm->addr, LOGGER_DEBUG,
|
wpa_auth_logger(sm->wpa_auth, sm->addr, LOGGER_DEBUG,
|
||||||
"strict rekeying - force GTK rekey since STA "
|
"strict rekeying - force GTK rekey since STA "
|
||||||
"is leaving");
|
"is leaving");
|
||||||
eloop_cancel_timeout(wpa_rekey_gtk, sm->wpa_auth, NULL);
|
if (eloop_deplete_timeout(0, 500000, wpa_rekey_gtk,
|
||||||
eloop_register_timeout(0, 500000, wpa_rekey_gtk, sm->wpa_auth,
|
sm->wpa_auth, NULL) == -1)
|
||||||
NULL);
|
eloop_register_timeout(0, 500000, wpa_rekey_gtk, sm->wpa_auth,
|
||||||
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
eloop_cancel_timeout(wpa_send_eapol_timeout, sm->wpa_auth, sm);
|
eloop_cancel_timeout(wpa_send_eapol_timeout, sm->wpa_auth, sm);
|
||||||
|
|
Loading…
Reference in a new issue