diff options
| author | Jeff Johnson <jjohnson@qca.qualcomm.com> | 2015-08-12 19:27:41 -0700 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2015-08-14 13:29:19 +0530 |
| commit | 9a4db5a1fa151cfc8bea7441b3d11ee2a49c3fb0 (patch) | |
| tree | c9aba42e8d9ea77f11506871cae0f05ed26410b9 | |
| parent | 62c71dd8582279c33b9230c3c72e12e20fd5d0a4 (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.c | 40 |
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 */ /** |
