From cb28bd52e1f0300c128d96cc57127c1319100a24 Mon Sep 17 00:00:00 2001 From: Arend van Spriel Date: Tue, 2 Jul 2019 00:13:49 +0200 Subject: [PATCH] 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 Tested-by: Stefan Wahren Signed-off-by: Arend van Spriel --- src/drivers/driver.h | 8 ++++++++ src/drivers/driver_nl80211.c | 2 +- wpa_supplicant/wpa_supplicant.c | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 8a5cdb8e9..2a8459ae3 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -1073,6 +1073,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 7ed1878ad..0a356eefd 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 78eef388d..911d79d17 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 ||