diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 1452699efd4f..2f459a396181 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -29,6 +29,9 @@ #include #include "wlan_cm_roam_public_struct.h" +#define OWE_TRANSITION_OUI_TYPE "\x50\x6f\x9a\x1c" +#define OWE_TRANSITION_OUI_SIZE 4 + #define CFG_VALID_CHANNEL_LIST_LEN 100 #define CFG_PMKID_MODES_OKC (0x1) 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 5947d10c86fd..a07a4f20619b 100644 --- a/core/mac/src/pe/lim/lim_process_beacon_frame.c +++ b/core/mac/src/pe/lim/lim_process_beacon_frame.c @@ -59,6 +59,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 +69,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_FMT " RSSI %d", WMA_GET_RX_MPDU_LEN(rx_pkt_info), @@ -114,6 +118,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;