qcacld-3.0: Update addr3 in beacon if addr3 is 0 during roam sync ind
During roam sync indication if the addr3 of the beacon is 0, the PE session is created with bssid 0. Now if disconnect is received from AP or heartbeat failure happens, LIM is not able to find the session from the BSSID and thus VDEV delete is not sent to firmware but sme session is cleaned up. If a new connect req is received from supplicant it tries to disconnect the existing session, but as sme session is not connected, disconnect is dropped and connect req is processed and thus VDEV start is sent without VDEV stop leading to firmware crash. To fix this, if the addr3 of the received beacon/probe in roam sync is 0, update it to BSSID from bssid provided by firmware in the sync indication. Change-Id: I9b7e7b6059fbd0e1bb9a59ce28acff469c2ed97b CRs-Fixed: 2076012
This commit is contained in:
@@ -1985,6 +1985,15 @@ lim_roam_fill_bss_descr(tpAniSirGlobal pMac,
|
|||||||
bss_desc_ptr->timeStamp[1] = parsed_frm_ptr->timeStamp[1];
|
bss_desc_ptr->timeStamp[1] = parsed_frm_ptr->timeStamp[1];
|
||||||
qdf_mem_copy(&bss_desc_ptr->capabilityInfo,
|
qdf_mem_copy(&bss_desc_ptr->capabilityInfo,
|
||||||
&bcn_proberesp_ptr[SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_CAPAB_OFFSET], 2);
|
&bcn_proberesp_ptr[SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_CAPAB_OFFSET], 2);
|
||||||
|
|
||||||
|
if (qdf_is_macaddr_zero((struct qdf_mac_addr *)mac_hdr->bssId)) {
|
||||||
|
pe_debug("bssid is 0 in beacon/probe update it with bssId %pM in sync ind",
|
||||||
|
roam_offload_synch_ind_ptr->bssid.bytes);
|
||||||
|
qdf_mem_copy(mac_hdr->bssId,
|
||||||
|
roam_offload_synch_ind_ptr->bssid.bytes,
|
||||||
|
sizeof(tSirMacAddr));
|
||||||
|
}
|
||||||
|
|
||||||
qdf_mem_copy((uint8_t *) &bss_desc_ptr->bssId,
|
qdf_mem_copy((uint8_t *) &bss_desc_ptr->bssId,
|
||||||
(uint8_t *) mac_hdr->bssId,
|
(uint8_t *) mac_hdr->bssId,
|
||||||
sizeof(tSirMacAddr));
|
sizeof(tSirMacAddr));
|
||||||
|
Reference in New Issue
Block a user