Эх сурвалжийг харах

qcacld-3.0: Make ssid whitelisting per vdev

Whitelist SSIDs are configured per netdev.

Therefore, move the ssid white list configurations
from psoc level to per vdev level.

Change-Id: Ia555f0c15362099afaae562a2779f7c26c1f4fe5
CRs-Fixed: 3510816
Surya Prakash Sivaraj 2 жил өмнө
parent
commit
aaae25f8ab

+ 3 - 3
components/umac/mlme/connection_mgr/core/src/wlan_cm_host_util.c

@@ -40,7 +40,7 @@
  * Return void
  */
 static void
-cm_copy_ssids_from_rso_config_params(struct rso_config_params *rso_usr_cfg,
+cm_copy_ssids_from_rso_config_params(struct rso_user_config *rso_usr_cfg,
 				     struct scan_filter *filter)
 {
 	uint8_t i;
@@ -67,7 +67,7 @@ QDF_STATUS cm_update_advance_roam_scan_filter(
 	struct rso_config *rso_cfg;
 	struct rso_chan_info *chan_lst;
 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
-	struct rso_config_params *rso_usr_cfg;
+	struct rso_user_config *rso_usr_cfg;
 
 	psoc = wlan_vdev_get_psoc(vdev);
 	if (!psoc) {
@@ -79,7 +79,7 @@ QDF_STATUS cm_update_advance_roam_scan_filter(
 	if (!mlme_obj)
 		return QDF_STATUS_E_FAILURE;
 
-	rso_usr_cfg = &mlme_obj->cfg.lfr.rso_user_config;
+	rso_usr_cfg = wlan_cm_get_rso_user_config(vdev);
 
 	mlme_debug("No of Allowed SSID List:%d",
 		   rso_usr_cfg->num_ssid_allowed_list);

+ 25 - 9
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c

@@ -2344,6 +2344,8 @@ cm_roam_scan_filter(struct wlan_objmgr_psoc *psoc,
 	struct roam_scan_filter_params *params;
 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
 	struct rso_config_params *rso_usr_cfg;
+	struct rso_user_config *rso_usr_config;
+	struct wlan_objmgr_vdev *vdev;
 
 	mlme_obj = mlme_get_psoc_ext_obj(psoc);
 	if (!mlme_obj)
@@ -2352,6 +2354,16 @@ cm_roam_scan_filter(struct wlan_objmgr_psoc *psoc,
 	scan_filter_params->reason = reason;
 	params = &scan_filter_params->filter_params;
 	rso_usr_cfg = &mlme_obj->cfg.lfr.rso_user_config;
+
+	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
+						    WLAN_MLME_CM_ID);
+	if (!vdev)
+		return;
+
+	rso_usr_config = wlan_cm_get_rso_user_config(vdev);
+	if (!rso_usr_config)
+		goto end;
+
 	if (command != ROAM_SCAN_OFFLOAD_STOP) {
 		switch (reason) {
 		case REASON_ROAM_SET_DENYLIST_BSSID:
@@ -2361,7 +2373,7 @@ cm_roam_scan_filter(struct wlan_objmgr_psoc *psoc,
 		case REASON_ROAM_SET_SSID_ALLOWED:
 			op_bitmap |= ROAM_FILTER_OP_BITMAP_WHITE_LIST;
 			num_ssid_allow_list =
-				rso_usr_cfg->num_ssid_allowed_list;
+				rso_usr_config->num_ssid_allowed_list;
 			break;
 		case REASON_ROAM_SET_FAVORED_BSSID:
 			op_bitmap |= ROAM_FILTER_OP_BITMAP_PREFER_BSSID;
@@ -2371,7 +2383,7 @@ cm_roam_scan_filter(struct wlan_objmgr_psoc *psoc,
 		case REASON_CTX_INIT:
 			if (command == ROAM_SCAN_OFFLOAD_START) {
 				num_ssid_allow_list =
-					rso_usr_cfg->num_ssid_allowed_list;
+					rso_usr_config->num_ssid_allowed_list;
 				if (num_ssid_allow_list)
 					op_bitmap |=
 					ROAM_FILTER_OP_BITMAP_WHITE_LIST;
@@ -2394,13 +2406,13 @@ cm_roam_scan_filter(struct wlan_objmgr_psoc *psoc,
 						DRIVER_RSSI_REJECT_TYPE);
 			} else {
 				mlme_debug("Roam Filter need not be sent, no need to fill parameters");
-				return;
+				goto end;
 			}
 			break;
 		default:
 			if (command == ROAM_SCAN_OFFLOAD_START) {
 				num_ssid_allow_list =
-					rso_usr_cfg->num_ssid_allowed_list;
+					rso_usr_config->num_ssid_allowed_list;
 				if (num_ssid_allow_list)
 					op_bitmap |=
 					ROAM_FILTER_OP_BITMAP_WHITE_LIST;
@@ -2411,7 +2423,7 @@ cm_roam_scan_filter(struct wlan_objmgr_psoc *psoc,
 			}
 			if (!op_bitmap) {
 				mlme_debug("Roam Filter need not be sent, no need to fill parameters");
-				return;
+				goto end;
 			}
 			break;
 		}
@@ -2424,7 +2436,7 @@ cm_roam_scan_filter(struct wlan_objmgr_psoc *psoc,
 			    ROAM_FILTER_OP_BITMAP_PREFER_BSSID;
 		if (reason == REASON_ROAM_SET_SSID_ALLOWED)
 			num_ssid_allow_list =
-					rso_usr_cfg->num_ssid_allowed_list;
+					rso_usr_config->num_ssid_allowed_list;
 		num_bssid_preferred_list = rso_usr_cfg->num_bssid_favored;
 	}
 
@@ -2438,10 +2450,10 @@ cm_roam_scan_filter(struct wlan_objmgr_psoc *psoc,
 
 	for (i = 0; i < num_ssid_allow_list; i++) {
 		qdf_mem_copy(params->ssid_allowed_list[i].ssid,
-			     rso_usr_cfg->ssid_allowed_list[i].ssid,
-			     rso_usr_cfg->ssid_allowed_list[i].length);
+			     rso_usr_config->ssid_allowed_list[i].ssid,
+			     rso_usr_config->ssid_allowed_list[i].length);
 		params->ssid_allowed_list[i].length =
-				rso_usr_cfg->ssid_allowed_list[i].length;
+				rso_usr_config->ssid_allowed_list[i].length;
 		mlme_debug("SSID %d: " QDF_SSID_FMT, i,
 			   QDF_SSID_REF(params->ssid_allowed_list[i].length,
 					params->ssid_allowed_list[i].ssid));
@@ -2477,6 +2489,10 @@ cm_roam_scan_filter(struct wlan_objmgr_psoc *psoc,
 			   params->rssi_channel_penalization,
 			   params->num_disallowed_aps);
 	}
+
+end:
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
+	return;
 }
 
 #ifdef CONFIG_BAND_6GHZ

+ 2 - 0
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_api.h

@@ -170,9 +170,11 @@ struct cm_host_roam_start_ind {
 /**
  * struct cm_ext_obj - Connection manager legacy object
  * @rso_cfg: connect info to be used in RSO.
+ * @rso_usr_cfg: roam related userspace RSO configs.
  */
 struct cm_ext_obj {
 	struct rso_config rso_cfg;
+	struct rso_user_config rso_usr_cfg;
 };
 
 #ifdef WLAN_FEATURE_FILS_SK

+ 1 - 1
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_disconnect.c

@@ -138,7 +138,7 @@ cm_handle_disconnect_req(struct wlan_objmgr_vdev *vdev,
 		return QDF_STATUS_E_NOMEM;
 
 	cm_csr_handle_diconnect_req(vdev, req);
-	wlan_roam_reset_roam_params(psoc);
+	wlan_roam_reset_roam_params(vdev);
 	cm_roam_restore_default_config(pdev, vdev_id);
 	opmode = wlan_vdev_mlme_get_opmode(vdev);
 	if (opmode == QDF_STA_MODE)

+ 14 - 3
components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_api.h

@@ -304,6 +304,9 @@ wlan_cm_roam_cfg_set_value(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 struct rso_config *wlan_cm_get_rso_config_fl(struct wlan_objmgr_vdev *vdev,
 					     const char *func, uint32_t line);
 
+struct rso_user_config *
+wlan_cm_get_rso_user_config_fl(struct wlan_objmgr_vdev *vdev,
+			       const char *func, uint32_t line);
 /**
  * wlan_cm_get_rso_config  - get per vdev RSO config
  * @vdev: vdev pointer
@@ -313,6 +316,14 @@ struct rso_config *wlan_cm_get_rso_config_fl(struct wlan_objmgr_vdev *vdev,
 #define wlan_cm_get_rso_config(vdev) \
 	wlan_cm_get_rso_config_fl(vdev, __func__, __LINE__)
 
+/**
+ * wlan_cm_get_rso_config - get per vdev RSO userspace config
+ * @vdev: vdev pointer
+ *
+ * Return: rso user space config pointer
+ */
+#define wlan_cm_get_rso_user_config(vdev) \
+	wlan_cm_get_rso_user_config_fl(vdev, __func__, __LINE__)
 /**
  * wlan_cm_set_disable_hi_rssi  - set disable hi rssi config
  * @pdev: pdev pointer
@@ -390,11 +401,11 @@ static inline void wlan_cm_ese_populate_additional_ies(
 
 /**
  * wlan_roam_reset_roam_params  - reset_roam params
- * @psoc: vdev pointer
+ * @vdev: vdev pointer
  *
- * Return: QDF_STATUS
+ * Return: void
  */
-void wlan_roam_reset_roam_params(struct wlan_objmgr_psoc *psoc);
+void wlan_roam_reset_roam_params(struct wlan_objmgr_vdev *vdev);
 
 /**
  * wlan_cm_rso_config_init  - initialize RSO config

+ 13 - 7
components/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_roam_public_struct.h

@@ -626,6 +626,19 @@ struct rso_config {
 	struct wlan_chan_list tried_candidate_freq_list;
 };
 
+/**
+ * struct rso_user_config - userspace configured RSO related
+ * configs.
+ * @num_ssid_allowed_list: The number of SSID profiles that are
+ * in the allowlist. When roaming, we consider the BSSID's with
+ * this SSID also for roaming apart from the connected ones
+ * @ssid_allowed_list: Allowlist SSIDs
+ */
+struct rso_user_config {
+	uint8_t num_ssid_allowed_list;
+	struct wlan_ssid ssid_allowed_list[MAX_SSID_ALLOWED_LIST];
+};
+
 /**
  * enum sta_roam_policy_dfs_mode - state of DFS mode for STA ROME policy
  * @STA_ROAM_POLICY_NONE: DFS mode attribute is not valid
@@ -657,11 +670,6 @@ struct rso_roam_policy_params {
 
 /**
  * struct rso_config_params - global RSO params
- * @num_ssid_allowed_list: The number of SSID profiles that are
- *                         in the Allowlist. When roaming, we
- *                         consider the BSSID's with this SSID
- *                         also for roaming apart from the connected one's
- * @ssid_allowed_list: Allowlist SSID's
  * @num_bssid_favored: Number of BSSID's which have a preference over others
  * @bssid_favored: Favorable BSSID's
  * @bssid_favored_factor: RSSI to be added to this BSSID to prefer it
@@ -681,8 +689,6 @@ struct rso_roam_policy_params {
  * @neighbor_report_offload: neighbor report offload params
  */
 struct rso_config_params {
-	uint8_t num_ssid_allowed_list;
-	struct wlan_ssid ssid_allowed_list[MAX_SSID_ALLOWED_LIST];
 	uint8_t num_bssid_favored;
 	struct qdf_mac_addr bssid_favored[MAX_BSSID_FAVORED];
 	uint8_t bssid_favored_factor[MAX_BSSID_FAVORED];

+ 22 - 7
components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c

@@ -1414,17 +1414,14 @@ wlan_cm_roam_cfg_set_value(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
 	return status;
 }
 
-void wlan_roam_reset_roam_params(struct wlan_objmgr_psoc *psoc)
+void wlan_roam_reset_roam_params(struct wlan_objmgr_vdev *vdev)
 {
-	struct wlan_mlme_psoc_ext_obj *mlme_obj;
-	struct rso_config_params *rso_usr_cfg;
+	struct rso_user_config *rso_usr_cfg;
 
-	mlme_obj = mlme_get_psoc_ext_obj(psoc);
-	if (!mlme_obj)
+	rso_usr_cfg = wlan_cm_get_rso_user_config(vdev);
+	if (!rso_usr_cfg)
 		return;
 
-	rso_usr_cfg = &mlme_obj->cfg.lfr.rso_user_config;
-
 	/*
 	 * clear all the allowlist parameters and remaining
 	 * needs to be retained across connections.
@@ -1637,6 +1634,24 @@ struct rso_config *wlan_cm_get_rso_config_fl(struct wlan_objmgr_vdev *vdev,
 	return &cm_ext_obj->rso_cfg;
 }
 
+struct rso_user_config *
+wlan_cm_get_rso_user_config_fl(struct wlan_objmgr_vdev *vdev,
+			       const char *func, uint32_t line)
+{
+	struct cm_ext_obj *cm_ext_obj;
+	enum QDF_OPMODE op_mode = wlan_vdev_mlme_get_opmode(vdev);
+
+	/* get only for CLI and STA */
+	if (op_mode != QDF_STA_MODE && op_mode != QDF_P2P_CLIENT_MODE)
+		return NULL;
+
+	cm_ext_obj = cm_get_ext_hdl_fl(vdev, func, line);
+	if (!cm_ext_obj)
+		return NULL;
+
+	return &cm_ext_obj->rso_usr_cfg;
+}
+
 QDF_STATUS cm_roam_acquire_lock(struct wlan_objmgr_vdev *vdev)
 {
 	static struct rso_config *rso_cfg;

+ 28 - 15
core/hdd/src/wlan_hdd_cfg80211.c

@@ -5123,7 +5123,8 @@ const struct nla_policy wlan_hdd_set_roam_param_policy[
  */
 static int hdd_set_allow_list(struct hdd_context *hdd_ctx,
 			      struct rso_config_params *rso_config,
-			      struct nlattr **tb, uint8_t vdev_id)
+			      struct nlattr **tb, uint8_t vdev_id,
+			      struct rso_user_config *rso_usr_cfg)
 {
 	int rem, i;
 	uint32_t buf_len = 0, count;
@@ -5173,13 +5174,13 @@ static int hdd_set_allow_list(struct hdd_context *hdd_ctx,
 				continue;
 			}
 
-			ssid = &rso_config->ssid_allowed_list[i];
+			ssid = &rso_usr_cfg->ssid_allowed_list[i];
 			nla_memcpy(ssid->ssid,
 				   tb2[PARAM_LIST_SSID], buf_len - 1);
 			ssid->length = buf_len - 1;
 			hdd_debug("SSID[%d]: " QDF_SSID_FMT ",length = %d", i,
 				  QDF_SSID_REF(ssid->length, ssid->ssid),
-				  rso_config->ssid_allowed_list[i].length);
+				  rso_usr_cfg->ssid_allowed_list[i].length);
 			i++;
 		}
 	}
@@ -5189,10 +5190,10 @@ static int hdd_set_allow_list(struct hdd_context *hdd_ctx,
 		goto fail;
 	}
 
-	rso_config->num_ssid_allowed_list = i;
-	hdd_debug("Num of Allowed SSID %d", rso_config->num_ssid_allowed_list);
+	rso_usr_cfg->num_ssid_allowed_list = i;
+	hdd_debug("Num of Allowed SSID %d", rso_usr_cfg->num_ssid_allowed_list);
 	mac_handle = hdd_ctx->mac_handle;
-	sme_update_roam_params(mac_handle, vdev_id, rso_config,
+	sme_update_roam_params(mac_handle, vdev_id, rso_config, rso_usr_cfg,
 			       REASON_ROAM_SET_SSID_ALLOWED);
 	return 0;
 
@@ -5280,8 +5281,8 @@ static int hdd_set_bssid_prefs(struct hdd_context *hdd_ctx,
 
 	rso_config->num_bssid_favored = i;
 	mac_handle = hdd_ctx->mac_handle;
-	sme_update_roam_params(mac_handle, vdev_id,
-			       rso_config, REASON_ROAM_SET_FAVORED_BSSID);
+	sme_update_roam_params(mac_handle, vdev_id, rso_config, NULL,
+			       REASON_ROAM_SET_FAVORED_BSSID);
 
 	return 0;
 
@@ -5389,8 +5390,8 @@ static int hdd_set_denylist_bssid(struct hdd_context *hdd_ctx,
 	ucfg_dlm_add_userspace_deny_list(hdd_ctx->pdev, deny_list_bssid, j);
 	qdf_mem_free(deny_list_bssid);
 	mac_handle = hdd_ctx->mac_handle;
-	sme_update_roam_params(mac_handle, vdev_id,
-			       rso_config, REASON_ROAM_SET_DENYLIST_BSSID);
+	sme_update_roam_params(mac_handle, vdev_id, rso_config, NULL,
+			       REASON_ROAM_SET_DENYLIST_BSSID);
 
 	return 0;
 fail:
@@ -6631,13 +6632,15 @@ static int hdd_get_roam_control_config(struct hdd_context *hdd_ctx,
  * @data_len: length of @data
  * @vdev_id: vdev id
  * @rso_config: roam params
+ * @rso_usr_config: roam userspace params
  *
  * Return: 0 on success; error number on failure
  */
 static int hdd_set_ext_roam_params(struct hdd_context *hdd_ctx,
 				   const void *data, int data_len,
 				   uint8_t vdev_id,
-				   struct rso_config_params *rso_config)
+				   struct rso_config_params *rso_config,
+				   struct rso_user_config *rso_usr_cfg)
 {
 	uint32_t cmd_type, req_id;
 	struct nlattr *tb[MAX_ROAMING_PARAM + 1];
@@ -6666,7 +6669,8 @@ static int hdd_set_ext_roam_params(struct hdd_context *hdd_ctx,
 	hdd_debug("Req Id: %u Cmd Type: %u", req_id, cmd_type);
 	switch (cmd_type) {
 	case QCA_WLAN_VENDOR_ROAMING_SUBCMD_SSID_WHITE_LIST:
-		ret = hdd_set_allow_list(hdd_ctx, rso_config, tb, vdev_id);
+		ret = hdd_set_allow_list(hdd_ctx, rso_config, tb, vdev_id,
+					 rso_usr_cfg);
 		if (ret)
 			goto fail;
 		break;
@@ -6735,7 +6739,7 @@ static int hdd_set_ext_roam_params(struct hdd_context *hdd_ctx,
 			tb[PARAM_RSSI_TRIGGER]);
 		hdd_debug("Alert RSSI Threshold (%d)",
 			rso_config->alert_rssi_threshold);
-		sme_update_roam_params(mac_handle, vdev_id, rso_config,
+		sme_update_roam_params(mac_handle, vdev_id, rso_config, NULL,
 				       REASON_ROAM_EXT_SCAN_PARAMS_CHANGED);
 		break;
 	case QCA_WLAN_VENDOR_ROAMING_SUBCMD_SET_LAZY_ROAM:
@@ -6748,7 +6752,7 @@ static int hdd_set_ext_roam_params(struct hdd_context *hdd_ctx,
 			tb[PARAM_ROAM_ENABLE]);
 		hdd_debug("Activate Good Rssi Roam (%d)",
 			  rso_config->good_rssi_roam);
-		sme_update_roam_params(mac_handle, vdev_id, rso_config,
+		sme_update_roam_params(mac_handle, vdev_id, rso_config, NULL,
 				       REASON_ROAM_GOOD_RSSI_CHANGED);
 		break;
 	case QCA_WLAN_VENDOR_ROAMING_SUBCMD_SET_BSSID_PREFS:
@@ -6804,6 +6808,8 @@ __wlan_hdd_cfg80211_set_ext_roam_params(struct wiphy *wiphy,
 	struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
 	struct hdd_context *hdd_ctx = wiphy_priv(wiphy);
 	struct rso_config_params *rso_config;
+	struct rso_user_config *rso_usr_cfg = NULL;
+
 	int ret;
 
 	if (QDF_GLOBAL_FTM_MODE == hdd_get_conparam()) {
@@ -6824,9 +6830,16 @@ __wlan_hdd_cfg80211_set_ext_roam_params(struct wiphy *wiphy,
 	if (!rso_config)
 		return -ENOMEM;
 
+	rso_usr_cfg = qdf_mem_malloc(sizeof(*rso_usr_cfg));
+	if (!rso_usr_cfg)
+		return -ENOMEM;
+
 	ret = hdd_set_ext_roam_params(hdd_ctx, data, data_len,
-				      adapter->deflink->vdev_id, rso_config);
+				      adapter->deflink->vdev_id, rso_config,
+				      rso_usr_cfg);
 	qdf_mem_free(rso_config);
+	qdf_mem_free(rso_usr_cfg);
+
 	if (ret)
 		goto fail;
 

+ 2 - 0
core/sme/inc/sme_api.h

@@ -464,6 +464,7 @@ void sme_cleanup_session(mac_handle_t mac_handle, uint8_t vdev_id);
  * @mac_handle: Opaque handle to the global MAC context
  * @vdev_id:                  vdev ID
  * @src_rso_config:           The source to copy
+ * @src_rso_usr_cfg:          The source to copy
  * @update_param:             Type of parameter to be updated
  *
  * Return: Return the status of the updation.
@@ -471,6 +472,7 @@ void sme_cleanup_session(mac_handle_t mac_handle, uint8_t vdev_id);
 QDF_STATUS sme_update_roam_params(mac_handle_t mac_handle,
 				  uint8_t vdev_id,
 				  struct rso_config_params *src_rso_config,
+				  struct rso_user_config *src_rso_usr_cfg,
 				  int update_param);
 QDF_STATUS sme_update_config(mac_handle_t mac_handle,
 			     struct sme_config_params *pSmeConfigParams);

+ 26 - 9
core/sme/src/common/sme_api.c

@@ -982,6 +982,7 @@ QDF_STATUS sme_update_config(mac_handle_t mac_handle,
 QDF_STATUS sme_update_roam_params(mac_handle_t mac_handle,
 				  uint8_t vdev_id,
 				  struct rso_config_params *src_rso_config,
+				  struct rso_user_config *src_rso_usr_cfg,
 				  int update_param)
 {
 	struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
@@ -989,12 +990,27 @@ QDF_STATUS sme_update_roam_params(mac_handle_t mac_handle,
 	uint8_t i;
 	struct wlan_mlme_psoc_ext_obj *mlme_obj;
 	struct rso_config_params *dst_rso_usr_cfg;
+	struct rso_user_config *rso_usr_cfg;
+	struct wlan_objmgr_vdev *vdev;
 
 	mlme_obj = mlme_get_psoc_ext_obj(mac_ctx->psoc);
 	if (!mlme_obj)
 		return QDF_STATUS_E_FAILURE;
 
 	dst_rso_usr_cfg = &mlme_obj->cfg.lfr.rso_user_config;
+
+	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc, vdev_id,
+						    WLAN_LEGACY_SME_ID);
+	if (!vdev)
+		return QDF_STATUS_E_FAILURE;
+
+	rso_usr_cfg = wlan_cm_get_rso_user_config(vdev);
+
+	if (!rso_usr_cfg) {
+		wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
+		return QDF_STATUS_E_FAILURE;
+	}
+
 	switch (update_param) {
 	case REASON_ROAM_EXT_SCAN_PARAMS_CHANGED:
 		mac_ctx->mlme_cfg->lfr.rssi_boost_threshold_5g =
@@ -1013,16 +1029,16 @@ QDF_STATUS sme_update_roam_params(mac_handle_t mac_handle,
 		mac_ctx->mlme_cfg->lfr.enable_5g_band_pref = true;
 		break;
 	case REASON_ROAM_SET_SSID_ALLOWED:
-		qdf_mem_zero(&dst_rso_usr_cfg->ssid_allowed_list,
+		qdf_mem_zero(&rso_usr_cfg->ssid_allowed_list,
 			     sizeof(struct wlan_ssid) * MAX_SSID_ALLOWED_LIST);
-		dst_rso_usr_cfg->num_ssid_allowed_list =
-			src_rso_config->num_ssid_allowed_list;
-		for (i = 0; i < dst_rso_usr_cfg->num_ssid_allowed_list; i++) {
-			dst_rso_usr_cfg->ssid_allowed_list[i].length =
-				src_rso_config->ssid_allowed_list[i].length;
-			qdf_mem_copy(dst_rso_usr_cfg->ssid_allowed_list[i].ssid,
-				src_rso_config->ssid_allowed_list[i].ssid,
-				dst_rso_usr_cfg->ssid_allowed_list[i].length);
+		rso_usr_cfg->num_ssid_allowed_list =
+			src_rso_usr_cfg->num_ssid_allowed_list;
+		for (i = 0; i < rso_usr_cfg->num_ssid_allowed_list; i++) {
+			rso_usr_cfg->ssid_allowed_list[i].length =
+				src_rso_usr_cfg->ssid_allowed_list[i].length;
+			qdf_mem_copy(rso_usr_cfg->ssid_allowed_list[i].ssid,
+				     src_rso_usr_cfg->ssid_allowed_list[i].ssid,
+				     rso_usr_cfg->ssid_allowed_list[i].length);
 		}
 		break;
 	case REASON_ROAM_SET_FAVORED_BSSID:
@@ -1051,6 +1067,7 @@ QDF_STATUS sme_update_roam_params(mac_handle_t mac_handle,
 		sme_release_global_lock(&mac_ctx->sme);
 	}
 
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
 	return 0;
 }