@@ -2902,8 +2902,11 @@ static int wpa_driver_nl80211_set_key(const char *ifname, struct i802_bss *bss,
#endif /* CONFIG_DRIVER_NL80211_QCA */
if (alg == WPA_ALG_PMK &&
- (drv->capa.flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE))
+ (drv->capa.flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE)) {
+ if(nla_put_flag(msg, NL80211_ATTR_WANT_1X_4WAY_HS))
+ return -1;
return nl80211_set_pmk(drv, key, key_len, addr);
+ }
if (alg == WPA_ALG_NONE) {
msg = nl80211_ifindex_msg(drv, ifindex, 0, NL80211_CMD_DEL_KEY);
@@ -5406,11 +5409,15 @@ static int nl80211_connect_common(struct wpa_driver_nl80211_data *drv,
}
/* Add PSK in case of 4-way handshake offload */
- if (params->psk &&
- (drv->capa.flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE)) {
- wpa_hexdump_key(MSG_DEBUG, " * PSK", params->psk, 32);
- if (nla_put(msg, NL80211_ATTR_PMK, 32, params->psk))
+ if (drv->capa.flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE) {
+ /* Ask the driver we want offloading */
+ if(nla_put_flag(msg, NL80211_ATTR_WANT_1X_4WAY_HS))
return -1;
+ if (params->psk) {
+ wpa_hexdump_key(MSG_DEBUG, " * PSK", params->psk, 32);
+ if (nla_put(msg, NL80211_ATTR_PMK, 32, params->psk))
+ return -1;
+ }
}
if (nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT))