wlan: Fix race condition in new cfg80211 APIs
Newly added cfg80211 APIs are not SSR protected; when SSR is in porgress
these APIs should be blocked.
Change-Id: Iafbb569808f645b7679548311cca5b2484eabee4
CR-Fixed: 409532
diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c
index 51ae0ce..da84f5b 100644
--- a/CORE/HDD/src/wlan_hdd_p2p.c
+++ b/CORE/HDD/src/wlan_hdd_p2p.c
@@ -232,6 +232,12 @@
return -EBUSY;
}
+ if (((hdd_context_t*)pAdapter->pHddCtx)->isLogpInProgress)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s:LOGP in Progress. Ignore!!!", __func__);
+ return -EAGAIN;
+ }
pRemainChanCtx = vos_mem_malloc( sizeof(hdd_remain_on_chan_ctx_t) );
if( NULL == pRemainChanCtx )
{
@@ -359,6 +365,12 @@
hddLog( LOG1, "Cancel remain on channel req");
+ if (((hdd_context_t*)pAdapter->pHddCtx)->isLogpInProgress)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s:LOGP in Progress. Ignore!!!", __func__);
+ return -EAGAIN;
+ }
/* FIXME cancel currently running remain on chan.
* Need to check cookie and cancel accordingly
*/
@@ -978,6 +990,16 @@
return NULL;
}
+ if (pHddCtx->isLogpInProgress)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s:LOGP in Progress. Ignore!!!", __func__);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
+ return NULL;
+#else
+ return -EAGAIN;
+#endif
+ }
if ( pHddCtx->cfg_ini->isP2pDeviceAddrAdministrated )
{
if( (NL80211_IFTYPE_P2P_GO == type) ||
@@ -1025,6 +1047,12 @@
hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d",
__func__,pVirtAdapter->device_mode);
+ if (pHddCtx->isLogpInProgress)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s:LOGP in Progress. Ignore!!!", __func__);
+ return -EAGAIN;
+ }
wlan_hdd_release_intf_addr( pHddCtx,
pVirtAdapter->macAddressCurrent.bytes );