diff options
author | Pragaspathi Thilagaraj <tpragasp@codeaurora.org> | 2020-09-22 18:49:45 +0530 |
---|---|---|
committer | Victor Hsu <hsuvictor@google.com> | 2020-10-27 13:44:01 +0800 |
commit | b59be895bb1241a114606f00f88c4902835a2dc7 (patch) | |
tree | dd4dae97734514d4e406fee4634918fec82f7807 | |
parent | f6732ae1d51c56cadcb37e4b475bc669036e5185 (diff) | |
download | qcacld-b59be895bb1241a114606f00f88c4902835a2dc7.tar.gz |
qcacld-3.0: Wait for probe response from AP in OWE transition mode
In OWE transition mode, the AP advertises one Hidden SSID and one
normal ssid and the OWE capable STA connects to the OWE supported
hidden SSID. When connecting to the hidden SSID, if the AP sends
beacon for the unicast probe request sent by driver before
anouncing join success, then the beacon NULL ssid gets updated to
the kernel. Then after successful association, while indicating
the connection successs to the kernel, the current bss is not
filled as wlan_cfg80211_get_bss() is called with the actual ssid
and not the NULL ssid.
Due to this when supplicant sends install key command for this
bss, kernel returns error and set_key always fails.
Wait for the probe response from the AP for the unicast probe
request sent before announcing join success and drop the beacon
received from the AP so that the driver
fills the proper ssid to the kernel bss entry and same ssid gets
used in association completion handler.
Bug: 168810760
Change-Id: Icded0af5d45d3281ab4304bf166bdc318aa7a942
CRs-Fixed: 2782618
Signed-off-by: Victor Hsu <hsuvictor@google.com>
-rw-r--r-- | components/mlme/dispatcher/inc/wlan_mlme_public_struct.h | 3 | ||||
-rw-r--r-- | core/mac/src/pe/lim/lim_process_beacon_frame.c | 14 |
2 files changed, 17 insertions, 0 deletions
diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 9d48a5104b..9d81bdf1d0 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -28,6 +28,9 @@ #include <wmi_unified_param.h> #include <sir_api.h> +#define OWE_TRANSITION_OUI_TYPE "\x50\x6f\x9a\x1c" +#define OWE_TRANSITION_OUI_SIZE 4 + #define CFG_PMKID_MODES_OKC (0x1) #define CFG_PMKID_MODES_PMKSA_CACHING (0x2) diff --git a/core/mac/src/pe/lim/lim_process_beacon_frame.c b/core/mac/src/pe/lim/lim_process_beacon_frame.c index c14e531055..d3251868e5 100644 --- a/core/mac/src/pe/lim/lim_process_beacon_frame.c +++ b/core/mac/src/pe/lim/lim_process_beacon_frame.c @@ -37,6 +37,7 @@ #include "lim_assoc_utils.h" #include "lim_prop_exts_utils.h" #include "lim_ser_des_utils.h" +#include <wlan_utility.h> /** * lim_process_beacon_frame() - to process beacon frames @@ -59,6 +60,8 @@ lim_process_beacon_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info, { tpSirMacMgmtHdr mac_hdr; tSchBeaconStruct *bcn_ptr; + uint8_t *frame; + uint16_t frame_len; mac_ctx->lim.gLimNumBeaconsRcvd++; @@ -67,6 +70,8 @@ lim_process_beacon_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info, * beacon counter */ mac_hdr = WMA_GET_RX_MAC_HEADER(rx_pkt_info); + frame = WMA_GET_RX_MPDU_DATA(rx_pkt_info); + frame_len = WMA_GET_RX_PAYLOAD_LEN(rx_pkt_info); pe_debug("Beacon (len %d): " QDF_MAC_ADDR_STR " RSSI %d", WMA_GET_RX_MPDU_LEN(rx_pkt_info), @@ -114,6 +119,15 @@ lim_process_beacon_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info, if (session->limMlmState == eLIM_MLM_WT_JOIN_BEACON_STATE) { + if (session->connected_akm == ANI_AKM_TYPE_OWE && + wlan_get_vendor_ie_ptr_from_oui(OWE_TRANSITION_OUI_TYPE, + OWE_TRANSITION_OUI_SIZE, + frame, frame_len)) { + pe_debug("Drop OWE rx beacon. Wait for probe for join success"); + qdf_mem_free(bcn_ptr); + return; + } + if (session->beacon) { qdf_mem_free(session->beacon); session->beacon = NULL; |