[PATCH] SAE: nl80211 send mlme frame fail (external auth)

"Ouden.Biz Lin" <[email protected]>
Newsgroups gmane.linux.drivers.hostap
Message-ID <CACYaJDRUXA-QmvXkm-DGtqKghNe7VL8ey4tvOkcEr4rQ+nW82w@mail.gmail.com>
When external authentication is used, the station send mlme frame (auth)
to driver that can't get the frequency (bss->freq) after hostap.git commit
b6f8b5a9 ("nl80211: Update freq only when CSA completes").

This patch will use the assoc_freq to send the mlem frame,
when external authentication is used.

Change-Id: Ic1629e2bba655645ada942d425f94dff7d90fbd7
Signed-off-by: Ouden Lin <[email protected]>
---
 src/drivers/driver_nl80211.c | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 64bea49e1..4741f23b8 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -3722,6 +3722,27 @@ static int wpa_driver_nl80211_send_mlme(struct
i802_bss *bss, const u8 *data,
  goto send_frame_cmd;
  }

+ if ((is_sta_interface(drv->nlmode) ||
+      drv->nlmode == NL80211_IFTYPE_P2P_DEVICE) &&
+     WLAN_FC_GET_TYPE(fc) == WLAN_FC_TYPE_MGMT &&
+     WLAN_FC_GET_STYPE(fc) == WLAN_FC_STYPE_PROBE_RESP) {
+ /*
+ * The use of last_mgmt_freq is a bit of a hack,
+ * but it works due to the single-threaded nature
+ * of wpa_supplicant.
+ */
+ if (freq == 0) {
+ wpa_printf(MSG_DEBUG, "nl80211: Use last_mgmt_freq=%d",
+    drv->last_mgmt_freq);
+ freq = drv->last_mgmt_freq;
+ }
+ wait_time = 0;
+ use_cookie = 0;
+ no_cck = 1;
+ offchanok = 1;
+ goto send_frame_cmd;
+ }
+
  if (drv->device_ap_sme && is_ap_interface(drv->nlmode)) {
  if (freq == 0) {
  wpa_printf(MSG_DEBUG, "nl80211: Use bss->freq=%d",
@@ -3747,6 +3768,20 @@ static int wpa_driver_nl80211_send_mlme(struct
i802_bss *bss, const u8 *data,
  encrypt = 0;
  }

+ if (freq == 0 && drv->nlmode == NL80211_IFTYPE_STATION &&
+ ((drv->capa.flags & WPA_DRIVER_FLAGS_SAE) &&
+ !(drv->capa.flags & WPA_DRIVER_FLAGS_SME)) &&
+ WLAN_FC_GET_TYPE(fc) == WLAN_FC_TYPE_MGMT &&
+ WLAN_FC_GET_STYPE(fc) == WLAN_FC_STYPE_AUTH) {
+
+ if (freq == 0) {
+ freq = nl80211_get_assoc_freq(drv);
+ wpa_printf(MSG_DEBUG,
+    "nl80211: send_mlme - Use assoc_freq=%u for external auth",
+    freq);
+ }
+ }
+
  if (freq == 0 && drv->nlmode == NL80211_IFTYPE_ADHOC) {
  freq = nl80211_get_assoc_freq(drv);
  wpa_printf(MSG_DEBUG,
-- 
2.21.1 (Apple Git-122.3)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.