Browse Source

qcacld-3.0: Send keys after peer assoc

Addressed issue with STA MLO connections,
ensuring that link keys are not sent to the
firmware before completion of the link
vdev connection.

Change-Id: I3d6291cc00f3387cff1fc154f9c57373fd356fa3
CRs-Fixed: 3575097
Aasir Rasheed 1 year ago
parent
commit
048cd25b14
1 changed files with 35 additions and 0 deletions
  1. 35 0
      core/hdd/src/wlan_hdd_cfg80211.c

+ 35 - 0
core/hdd/src/wlan_hdd_cfg80211.c

@@ -22605,6 +22605,29 @@ static void wlan_hdd_mlo_link_add_pairwise_key(struct wlan_objmgr_vdev *vdev,
 	}
 }
 
+static bool
+wlan_hdd_mlo_defer_set_keys(struct hdd_adapter *adapter,
+			    struct wlan_objmgr_vdev *vdev,
+			    struct qdf_mac_addr *mac_address)
+{
+	if (!adapter)
+		return false;
+
+	if (!vdev)
+		return false;
+
+	if ((adapter->device_mode == QDF_STA_MODE) &&
+	    ((!wlan_cm_is_vdev_connected(vdev)) ||
+	    (wlan_vdev_mlme_is_mlo_link_vdev(vdev) &&
+	     mlo_roam_is_auth_status_connected(adapter->hdd_ctx->psoc,
+					       wlan_vdev_get_id(vdev))))) {
+		hdd_debug("MLO:Defer set keys for vdev %d", wlan_vdev_get_id(vdev));
+		return true;
+	}
+
+	return false;
+}
+
 #else
 
 static void wlan_hdd_mlo_link_add_pairwise_key(struct wlan_objmgr_vdev *vdev,
@@ -22613,6 +22636,15 @@ static void wlan_hdd_mlo_link_add_pairwise_key(struct wlan_objmgr_vdev *vdev,
 					       struct key_params *params)
 {
 }
+
+static bool
+wlan_hdd_mlo_defer_set_keys(struct hdd_adapter *adapter,
+			    struct wlan_objmgr_vdev *vdev,
+			    struct qdf_mac_addr *mac_address)
+{
+	return false;
+}
+
 #endif
 
 static int wlan_hdd_add_key_vdev(mac_handle_t mac_handle,
@@ -22708,6 +22740,9 @@ done:
 					mac_address.bytes, params);
 	}
 
+	if (wlan_hdd_mlo_defer_set_keys(adapter, vdev, &mac_address))
+		return 0;
+
 	cipher_cap = wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_CIPHER_CAP);
 	if (errno)
 		return errno;