summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPragaspathi Thilagaraj <tpragasp@codeaurora.org>2020-09-22 18:49:45 +0530
committerVictor Hsu <hsuvictor@google.com>2020-10-27 13:44:01 +0800
commitb59be895bb1241a114606f00f88c4902835a2dc7 (patch)
treedd4dae97734514d4e406fee4634918fec82f7807
parentf6732ae1d51c56cadcb37e4b475bc669036e5185 (diff)
downloadqcacld-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.h3
-rw-r--r--core/mac/src/pe/lim/lim_process_beacon_frame.c14
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;