wlan: Protect cfg80211 ops functions from SSR
Protect cfg80211 ops connection and scan related function from
accessing uninitialized or deallocated data structures while SSR
is in progress.
Change-Id: Id83686544929f78c463dd01b037ff1b0dd6b250c
CRs-Fixed: 665492
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 22a316d..68f0ffa 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -5141,11 +5141,11 @@
}
/*
- * FUNCTION: wlan_hdd_cfg80211_scan
+ * FUNCTION: __wlan_hdd_cfg80211_scan
* this scan respond to scan trigger and update cfg80211 scan database
* later, scan dump command can be used to recieve scan results
*/
-int wlan_hdd_cfg80211_scan( struct wiphy *wiphy,
+int __wlan_hdd_cfg80211_scan( struct wiphy *wiphy,
#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
struct net_device *dev,
#endif
@@ -5576,6 +5576,24 @@
return status;
}
+int wlan_hdd_cfg80211_scan( struct wiphy *wiphy,
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
+ struct net_device *dev,
+#endif
+ struct cfg80211_scan_request *request)
+{
+ int ret;
+
+ vos_ssr_protect(__func__);
+ ret = __wlan_hdd_cfg80211_scan(wiphy,
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
+ dev,
+#endif
+ request);
+ vos_ssr_unprotect(__func__);
+
+ return ret;
+}
void hdd_select_cbmode( hdd_adapter_t *pAdapter,v_U8_t operationChannel)
{
@@ -6594,11 +6612,11 @@
}
/*
- * FUNCTION: wlan_hdd_cfg80211_set_privacy
+ * FUNCTION: __wlan_hdd_cfg80211_set_privacy
* This function is used to initialize the security
* parameters during connect operation.
*/
-static int wlan_hdd_cfg80211_connect( struct wiphy *wiphy,
+static int __wlan_hdd_cfg80211_connect( struct wiphy *wiphy,
struct net_device *ndev,
struct cfg80211_connect_params *req
)
@@ -6706,6 +6724,17 @@
return status;
}
+static int wlan_hdd_cfg80211_connect( struct wiphy *wiphy,
+ struct net_device *ndev,
+ struct cfg80211_connect_params *req)
+{
+ int ret;
+ vos_ssr_protect(__func__);
+ ret = __wlan_hdd_cfg80211_connect(wiphy, ndev, req);
+ vos_ssr_unprotect(__func__);
+
+ return ret;
+}
/*
* FUNCTION: wlan_hdd_disconnect
@@ -6765,10 +6794,10 @@
/*
- * FUNCTION: wlan_hdd_cfg80211_disconnect
+ * FUNCTION: __wlan_hdd_cfg80211_disconnect
* This function is used to issue a disconnect request to SME
*/
-static int wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy,
+static int __wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy,
struct net_device *dev,
u16 reason
)
@@ -6888,6 +6917,18 @@
return status;
}
+static int wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy,
+ struct net_device *dev,
+ u16 reason
+ )
+{
+ int ret;
+ vos_ssr_protect(__func__);
+ ret = __wlan_hdd_cfg80211_disconnect(wiphy, dev, reason);
+ vos_ssr_unprotect(__func__);
+
+ return ret;
+}
/*
* FUNCTION: wlan_hdd_cfg80211_set_privacy_ibss