summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnson <jjohnson@qca.qualcomm.com>2015-08-12 19:27:41 -0700
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2015-08-14 13:29:19 +0530
commit9a4db5a1fa151cfc8bea7441b3d11ee2a49c3fb0 (patch)
treec9aba42e8d9ea77f11506871cae0f05ed26410b9
parent62c71dd8582279c33b9230c3c72e12e20fd5d0a4 (diff)
qcacld-2.0: SSR-protect wlan_hdd_cfg80211_reset_passpoint_list()
Currently wlan_hdd_cfg80211_reset_passpoint_list() does not use the SSR protection wrapper and does not check for SSR in progress. This can lead to unexpected behavior if the function is executing concurrently with SSR, so add the SSR protection wrapper and HDD context validity check. Change-Id: I8738ddde1a3ce2386d0524054458089bd78c46e1 CRs-Fixed: 889507
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c40
1 files changed, 35 insertions, 5 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 4a660abddad0..8946a3639550 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -5009,7 +5009,7 @@ static int wlan_hdd_cfg80211_set_passpoint_list(struct wiphy *wiphy,
}
/**
- * wlan_hdd_cfg80211_reset_passpoint_list() - reset passpoint network list
+ * __wlan_hdd_cfg80211_reset_passpoint_list() - reset passpoint network list
* @wiphy: wiphy
* @wdev: pointer to wireless dev
* @data: data pointer
@@ -5019,10 +5019,10 @@ static int wlan_hdd_cfg80211_set_passpoint_list(struct wiphy *wiphy,
*
* Return: 0 on success, error number otherwise
*/
-static int wlan_hdd_cfg80211_reset_passpoint_list(struct wiphy *wiphy,
- struct wireless_dev *wdev,
- const void *data,
- int data_len)
+static int __wlan_hdd_cfg80211_reset_passpoint_list(struct wiphy *wiphy,
+ struct wireless_dev *wdev,
+ const void *data,
+ int data_len)
{
struct wifi_passpoint_req *req_msg = NULL;
struct net_device *dev = wdev->netdev;
@@ -5030,9 +5030,14 @@ static int wlan_hdd_cfg80211_reset_passpoint_list(struct wiphy *wiphy,
hdd_context_t *hdd_ctx = wiphy_priv(wiphy);
struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_PNO_MAX + 1];
eHalStatus status;
+ int ret;
ENTER();
+ ret = wlan_hdd_validate_context(hdd_ctx);
+ if (ret)
+ return ret;
+
if (VOS_FTM_MODE == hdd_get_conparam()) {
hddLog(LOGE, FL("Command not allowed in FTM mode"));
return -EINVAL;
@@ -5078,6 +5083,31 @@ fail:
return -EINVAL;
}
+/**
+ * wlan_hdd_cfg80211_reset_passpoint_list() - reset passpoint network list
+ * @wiphy: wiphy
+ * @wdev: pointer to wireless dev
+ * @data: data pointer
+ * @data_len: data length
+ *
+ * This function resets passpoint networks list
+ *
+ * Return: 0 on success, error number otherwise
+ */
+static int wlan_hdd_cfg80211_reset_passpoint_list(struct wiphy *wiphy,
+ struct wireless_dev *wdev,
+ const void *data,
+ int data_len)
+{
+ int ret;
+
+ vos_ssr_protect(__func__);
+ ret = __wlan_hdd_cfg80211_reset_passpoint_list(wiphy, wdev,
+ data, data_len);
+ vos_ssr_unprotect(__func__);
+
+ return ret;
+}
#endif /* FEATURE_WLAN_EXTSCAN */
/**