Fix for tdls link failed to established between p2p clients
Send the correct value of session id while sending the
eWNI_SME_TDLS_LINK_ESTABLISH_RSP message to SME from LIM.
CRs-Fixed: 503319
Change-Id: I9926dede5bdd688e5370255956eef4f4dffbd1e4
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 84be876..734fc86 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -7615,6 +7615,8 @@
if (eTDLS_LINK_CONNECTED != pTdlsPeer->link_status)
{
+ long ret;
+
if (0 != wlan_hdd_tdls_get_link_establish_params(pAdapter, peer,&tdlsLinkEstablishParams)) {
return -EINVAL;
}
@@ -7626,13 +7628,13 @@
* register with the TL on after the response for this operation
* is received .
*/
- status = wait_for_completion_interruptible_timeout(&pAdapter->tdls_link_establish_req_comp,
+ ret = wait_for_completion_interruptible_timeout(&pAdapter->tdls_link_establish_req_comp,
msecs_to_jiffies(WAIT_TIME_TDLS_LINK_ESTABLISH_REQ));
- if (status <= 0)
+ if (ret <= 0)
{
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: Link Establish Request Faled Status %ld",
- __func__, status);
+ __func__, ret);
return -EINVAL;
}
wlan_hdd_tdls_set_peer_link_status(pTdlsPeer, eTDLS_LINK_CONNECTED);
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index 783e678..9b43352 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -1908,13 +1908,33 @@
#ifdef FEATURE_WLAN_TDLS
case WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP:
{
+ tpPESession psessionEntry;
+ tANI_U8 sessionId;
tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams*) limMsg->bodyptr;
- limSendSmeTdlsLinkEstablishReqRsp(pMac,
- 0,
- NULL,
- NULL,
- pTdlsLinkEstablishParams->status) ;
+
+ if((psessionEntry = peFindSessionByStaId(pMac,
+ pTdlsLinkEstablishParams->staIdx,
+ &sessionId))== NULL)
+ {
+ limLog(pMac, LOGE, FL("session %u does not exist.\n"), sessionId);
+ /* Still send the eWNI_SME_TDLS_LINK_ESTABLISH_RSP message to SME
+ with session id as zero and status as FAILURE so, that message
+ queued in SME queue can be freed to prevent the SME cmd buffer leak */
+ limSendSmeTdlsLinkEstablishReqRsp(pMac,
+ 0,
+ NULL,
+ NULL,
+ eSIR_FAILURE);
+ }
+ else
+ {
+ limSendSmeTdlsLinkEstablishReqRsp(pMac,
+ psessionEntry->smeSessionId,
+ NULL,
+ NULL,
+ pTdlsLinkEstablishParams->status) ;
+ }
vos_mem_free((v_VOID_t *)(limMsg->bodyptr));
limMsg->bodyptr = NULL;
break;