From 9a4db5a1fa151cfc8bea7441b3d11ee2a49c3fb0 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Wed, 12 Aug 2015 19:27:41 -0700 Subject: 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 --- CORE/HDD/src/wlan_hdd_cfg80211.c | 40 +++++++++++++++++++++++++++++++++++----- 1 file 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 */ /** -- cgit v1.2.3