aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArend van Spriel <arend.vanspriel@broadcom.com>2019-07-01 22:13:49 (GMT)
committerJouni Malinen <j@w1.fi>2019-08-01 12:52:48 (GMT)
commitcb28bd52e1f0300c128d96cc57127c1319100a24 (patch)
tree2d777d21b12d2551e48da1736e4f321cccf4d333
parentac069a31ded8758ed1d5d09c6ecb534970896ba9 (diff)
downloadhostap-cb28bd52e1f0300c128d96cc57127c1319100a24.zip
hostap-cb28bd52e1f0300c128d96cc57127c1319100a24.tar.gz
hostap-cb28bd52e1f0300c128d96cc57127c1319100a24.tar.bz2
nl80211: Use separate flag for 4-way handshake offload
Commit d896874f8689 ("nl80211: Indicate 802.1X 4-way handshake offload in connect") used the req_key_mgmt_offload flag to indicate to the driver that it should offload the 802.1X handshake. However, this field was existing and used for a different offload API. This causes wpa_supplicant to send a connect request without the WANT_1X_HS flag and the subsequent set-pmk is rejected causing the connection to fail. Fix that by introducing a new flag req_handshake_offload so the offloads are no longer entangled. Fixes: d896874f8689 ("nl80211: Indicate 802.1X 4-way handshake offload in connect") Reported-by: Stefan Wahren <wahrenst@gmx.net> Tested-by: Stefan Wahren <wahrenst@gmx.net> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
-rw-r--r--src/drivers/driver.h8
-rw-r--r--src/drivers/driver_nl80211.c2
-rw-r--r--wpa_supplicant/wpa_supplicant.c2
3 files changed, 10 insertions, 2 deletions
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 8a5cdb8..2a8459a 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -1074,6 +1074,14 @@ struct wpa_driver_associate_params {
int req_key_mgmt_offload;
/**
+ * req_handshake_offload - Request EAPOL handshake offload
+ *
+ * Request EAPOL handshake offload for this connection if the device
+ * supports it.
+ */
+ int req_handshake_offload;
+
+ /**
* Flag for indicating whether this association includes support for
* RRM (Radio Resource Measurements)
*/
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 7ed1878..0a356ee 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -5633,7 +5633,7 @@ static int nl80211_connect_common(struct wpa_driver_nl80211_data *drv,
return -1;
}
- if (params->req_key_mgmt_offload &&
+ if (params->req_handshake_offload &&
(drv->capa.flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X)) {
wpa_printf(MSG_DEBUG, " * WANT_1X_4WAY_HS");
if (nla_put_flag(msg, NL80211_ATTR_WANT_1X_4WAY_HS))
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index 78eef38..911d79d 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -3229,7 +3229,7 @@ static void wpas_start_assoc_cb(struct wpa_radio_work *work, int deinit)
params.key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X_SHA256 ||
params.key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X_SUITE_B ||
params.key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X_SUITE_B_192))
- params.req_key_mgmt_offload = 1;
+ params.req_handshake_offload = 1;
if (wpa_s->conf->key_mgmt_offload) {
if (params.key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X ||