mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-12-01 03:38:21 -05:00
Include previous BSSID in connection request to indicate reassociation
This allows the SME-in-the-driver case to get similar information about reassociation that was already available for the SME-in-wpa_supplicant case. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
00c3c4ac9b
commit
6a5ee810a3
@ -1646,9 +1646,11 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
|
|||||||
|
|
||||||
wmm_ac_clear_saved_tspecs(wpa_s);
|
wmm_ac_clear_saved_tspecs(wpa_s);
|
||||||
wpa_s->reassoc_same_bss = 0;
|
wpa_s->reassoc_same_bss = 0;
|
||||||
|
wpa_s->reassoc_same_ess = 0;
|
||||||
|
|
||||||
if (wpa_s->last_ssid == ssid) {
|
if (wpa_s->last_ssid == ssid) {
|
||||||
wpa_dbg(wpa_s, MSG_DEBUG, "Re-association to the same ESS");
|
wpa_dbg(wpa_s, MSG_DEBUG, "Re-association to the same ESS");
|
||||||
|
wpa_s->reassoc_same_ess = 1;
|
||||||
if (wpa_s->current_bss && wpa_s->current_bss == bss) {
|
if (wpa_s->current_bss && wpa_s->current_bss == bss) {
|
||||||
wmm_ac_save_tspecs(wpa_s);
|
wmm_ac_save_tspecs(wpa_s);
|
||||||
wpa_s->reassoc_same_bss = 1;
|
wpa_s->reassoc_same_bss = 1;
|
||||||
@ -2063,6 +2065,7 @@ static void wpas_start_assoc_cb(struct wpa_radio_work *work, int deinit)
|
|||||||
int wep_keys_set = 0;
|
int wep_keys_set = 0;
|
||||||
int assoc_failed = 0;
|
int assoc_failed = 0;
|
||||||
struct wpa_ssid *old_ssid;
|
struct wpa_ssid *old_ssid;
|
||||||
|
u8 prev_bssid[ETH_ALEN];
|
||||||
#ifdef CONFIG_HT_OVERRIDES
|
#ifdef CONFIG_HT_OVERRIDES
|
||||||
struct ieee80211_ht_capabilities htcaps;
|
struct ieee80211_ht_capabilities htcaps;
|
||||||
struct ieee80211_ht_capabilities htcaps_mask;
|
struct ieee80211_ht_capabilities htcaps_mask;
|
||||||
@ -2096,6 +2099,7 @@ static void wpas_start_assoc_cb(struct wpa_radio_work *work, int deinit)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
os_memcpy(prev_bssid, wpa_s->bssid, ETH_ALEN);
|
||||||
os_memset(¶ms, 0, sizeof(params));
|
os_memset(¶ms, 0, sizeof(params));
|
||||||
wpa_s->reassociate = 0;
|
wpa_s->reassociate = 0;
|
||||||
wpa_s->eap_expected_failure = 0;
|
wpa_s->eap_expected_failure = 0;
|
||||||
@ -2536,6 +2540,10 @@ static void wpas_start_assoc_cb(struct wpa_radio_work *work, int deinit)
|
|||||||
}
|
}
|
||||||
#endif /* CONFIG_P2P */
|
#endif /* CONFIG_P2P */
|
||||||
|
|
||||||
|
if (wpa_s->reassoc_same_ess && !is_zero_ether_addr(prev_bssid) &&
|
||||||
|
wpa_s->current_ssid)
|
||||||
|
params.prev_bssid = prev_bssid;
|
||||||
|
|
||||||
ret = wpa_drv_associate(wpa_s, ¶ms);
|
ret = wpa_drv_associate(wpa_s, ¶ms);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
wpa_msg(wpa_s, MSG_INFO, "Association request to the driver "
|
wpa_msg(wpa_s, MSG_INFO, "Association request to the driver "
|
||||||
|
@ -494,7 +494,8 @@ struct wpa_supplicant {
|
|||||||
u8 pending_bssid[ETH_ALEN]; /* If wpa_state == WPA_ASSOCIATING, this
|
u8 pending_bssid[ETH_ALEN]; /* If wpa_state == WPA_ASSOCIATING, this
|
||||||
* field contains the target BSSID. */
|
* field contains the target BSSID. */
|
||||||
int reassociate; /* reassociation requested */
|
int reassociate; /* reassociation requested */
|
||||||
int reassoc_same_bss; /* reassociating to the same bss */
|
unsigned int reassoc_same_bss:1; /* reassociating to the same BSS */
|
||||||
|
unsigned int reassoc_same_ess:1; /* reassociating to the same ESS */
|
||||||
int disconnected; /* all connections disabled; i.e., do no reassociate
|
int disconnected; /* all connections disabled; i.e., do no reassociate
|
||||||
* before this has been cleared */
|
* before this has been cleared */
|
||||||
struct wpa_ssid *current_ssid;
|
struct wpa_ssid *current_ssid;
|
||||||
|
Loading…
Reference in New Issue
Block a user