Browse Source

FT: Process reassoc resp FT IEs when using wpa_supplicant SME

Jouni Malinen 15 years ago
parent
commit
62c72d7299
3 changed files with 18 additions and 0 deletions
  1. 16 0
      wpa_supplicant/events.c
  2. 1 0
      wpa_supplicant/sme.c
  3. 1 0
      wpa_supplicant/wpa_supplicant_i.h

+ 16 - 0
wpa_supplicant/events.c

@@ -1024,6 +1024,21 @@ static void wpa_supplicant_event_associnfo(struct wpa_supplicant *wpa_s,
 		wpa_sm_set_assoc_wpa_ie(wpa_s->wpa, NULL, 0);
 
 #ifdef CONFIG_IEEE80211R
+#ifdef CONFIG_SME
+	if (wpa_s->sme.auth_alg == WPA_AUTH_ALG_FT) {
+		u8 bssid[ETH_ALEN];
+		if (wpa_drv_get_bssid(wpa_s, bssid) < 0 ||
+		    wpa_ft_validate_reassoc_resp(wpa_s->wpa,
+						 data->assoc_info.resp_ies,
+						 data->assoc_info.resp_ies_len,
+						 bssid) < 0) {
+			wpa_printf(MSG_DEBUG, "FT: Validation of "
+				   "Reassociation Response failed");
+			/* TODO: force disconnection? */
+		}
+	}
+#endif /* CONFIG_SME */
+
 	p = data->assoc_info.resp_ies;
 	l = data->assoc_info.resp_ies_len;
 
@@ -1551,6 +1566,7 @@ static void ft_rx_action(struct wpa_supplicant *wpa_s, const u8 *data,
 		bss = wpa_bss_get_bssid(wpa_s, target_ap_addr);
 		if (bss)
 			wpa_s->sme.freq = bss->freq;
+		wpa_s->sme.auth_alg = WPA_AUTH_ALG_FT;
 		sme_associate(wpa_s, WPAS_MODE_INFRA, target_ap_addr,
 			      WLAN_AUTH_FT);
 	}

+ 1 - 0
wpa_supplicant/sme.c

@@ -222,6 +222,7 @@ void sme_authenticate(struct wpa_supplicant *wpa_s,
 	if (old_ssid != wpa_s->current_ssid)
 		wpas_notify_network_changed(wpa_s);
 
+	wpa_s->sme.auth_alg = params.auth_alg;
 	if (wpa_drv_authenticate(wpa_s, &params) < 0) {
 		wpa_msg(wpa_s, MSG_INFO, "Authentication request to the "
 			"driver failed");

+ 1 - 0
wpa_supplicant/wpa_supplicant_i.h

@@ -414,6 +414,7 @@ struct wpa_supplicant {
 		size_t ft_ies_len;
 		u8 prev_bssid[ETH_ALEN];
 		int prev_bssid_set;
+		int auth_alg;
 	} sme;
 #endif /* CONFIG_SME */