Browse Source

qcacld-3.0: Correct the key type value in set key request

Send correct key type parameter value to crypto component in
set key request.

Change-Id: I17554a72f62e356871cb0a684a066c7d794f4d02
CRs-Fixed: 2388032
Kiran Kumar Lokere 6 years ago
parent
commit
47d0dacaf4

+ 2 - 1
core/hdd/src/wlan_hdd_assoc.c

@@ -3807,7 +3807,8 @@ static QDF_STATUS wlan_hdd_set_key_helper(struct hdd_adapter *adapter,
 	vdev = hdd_objmgr_get_vdev(adapter);
 	if (!vdev)
 		return QDF_STATUS_E_FAILURE;
-	ret = wlan_cfg80211_crypto_add_key(vdev, true, 0);
+	ret = wlan_cfg80211_crypto_add_key(vdev,
+					   WLAN_CRYPTO_KEY_TYPE_UNICAST, 0);
 	hdd_objmgr_put_vdev(adapter);
 	if (ret != 0) {
 		hdd_err("crypto add key fail, status: %d", ret);

+ 32 - 8
core/hdd/src/wlan_hdd_cfg80211.c

@@ -13991,7 +13991,8 @@ static int wlan_hdd_add_key_ibss(struct hdd_adapter *adapter,
 	vdev = hdd_objmgr_get_vdev(adapter);
 	if (!vdev)
 		return -EINVAL;
-	errno = wlan_cfg80211_crypto_add_key(vdev, pairwise, key_index);
+	errno = wlan_cfg80211_crypto_add_key(vdev, WLAN_CRYPTO_KEY_TYPE_GROUP,
+					     key_index);
 	if (errno) {
 		hdd_err("add_ibss_key failed, errno: %d", errno);
 		hdd_objmgr_put_vdev(adapter);
@@ -14000,7 +14001,8 @@ static int wlan_hdd_add_key_ibss(struct hdd_adapter *adapter,
 	/* Save the keys here and call set_key for setting
 	 * the PTK after peer joins the IBSS network
 	 */
-	wlan_cfg80211_store_key(vdev, key_index, true, mac_addr, params);
+	wlan_cfg80211_store_key(vdev, key_index, WLAN_CRYPTO_KEY_TYPE_UNICAST,
+				mac_addr, params);
 	hdd_objmgr_put_vdev(adapter);
 	adapter->session.station.ibss_enc_key_installed = 1;
 
@@ -14019,7 +14021,11 @@ static int wlan_hdd_add_key_sap(struct hdd_adapter *adapter,
 	if (!vdev)
 		return -EINVAL;
 	if (hostapd_state->bss_state == BSS_START)
-		errno = wlan_cfg80211_crypto_add_key(vdev, pairwise, key_index);
+		errno =
+		wlan_cfg80211_crypto_add_key(vdev, (pairwise ?
+					     WLAN_CRYPTO_KEY_TYPE_UNICAST :
+					     WLAN_CRYPTO_KEY_TYPE_GROUP),
+					     key_index);
 	hdd_objmgr_put_vdev(adapter);
 
 	return errno;
@@ -14054,7 +14060,10 @@ static int wlan_hdd_add_key_sta(struct hdd_adapter *adapter,
 	vdev = hdd_objmgr_get_vdev(adapter);
 	if (!vdev)
 		return -EINVAL;
-	errno = wlan_cfg80211_crypto_add_key(vdev, pairwise, key_index);
+	errno = wlan_cfg80211_crypto_add_key(vdev, (pairwise ?
+					     WLAN_CRYPTO_KEY_TYPE_UNICAST :
+					     WLAN_CRYPTO_KEY_TYPE_GROUP),
+					     key_index);
 	hdd_objmgr_put_vdev(adapter);
 	if (!errno && adapter->send_mode_change) {
 		wlan_hdd_send_mode_change_event();
@@ -14077,6 +14086,7 @@ static int __wlan_hdd_cfg80211_add_key(struct wiphy *wiphy,
 	bool key_already_installed = false, ft_mode = false;
 	enum wlan_crypto_cipher_type cipher;
 	int errno;
+	struct qdf_mac_addr mac_address;
 
 	hdd_enter();
 
@@ -14112,8 +14122,19 @@ static int __wlan_hdd_cfg80211_add_key(struct wiphy *wiphy,
 	vdev = hdd_objmgr_get_vdev(adapter);
 	if (!vdev)
 		return -EINVAL;
-	errno = wlan_cfg80211_store_key(vdev, key_index, pairwise, mac_addr,
-					params);
+	if (!pairwise && ((adapter->device_mode == QDF_STA_MODE) ||
+	    (adapter->device_mode == QDF_P2P_CLIENT_MODE))) {
+		qdf_mem_copy(mac_address.bytes,
+			     adapter->session.station.conn_info.bssId.bytes,
+			     QDF_MAC_ADDR_SIZE);
+	} else {
+		qdf_mem_copy(mac_address.bytes, mac_addr, QDF_MAC_ADDR_SIZE);
+	}
+	errno = wlan_cfg80211_store_key(vdev, key_index,
+					(pairwise ?
+					WLAN_CRYPTO_KEY_TYPE_UNICAST :
+					WLAN_CRYPTO_KEY_TYPE_GROUP),
+					mac_address.bytes, params);
 	hdd_objmgr_put_vdev(adapter);
 	if (errno)
 		return errno;
@@ -14735,8 +14756,11 @@ static int __wlan_hdd_cfg80211_set_default_key(struct wiphy *wiphy,
 	}
 	if ((adapter->device_mode == QDF_STA_MODE) ||
 	    (adapter->device_mode == QDF_P2P_CLIENT_MODE)) {
-		ret = wlan_cfg80211_crypto_add_key(adapter->vdev, unicast,
-						   key_index);
+		ret =
+		wlan_cfg80211_crypto_add_key(adapter->vdev, (unicast ?
+					     WLAN_CRYPTO_KEY_TYPE_UNICAST :
+					     WLAN_CRYPTO_KEY_TYPE_GROUP),
+					     key_index);
 	}
 
 	return ret;

+ 10 - 4
core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c

@@ -2828,9 +2828,12 @@ void lim_process_mlm_set_sta_key_rsp(struct mac_context *mac_ctx,
 		return;
 	}
 	set_key_params = msg->bodyptr;
-	session_id = set_key_params->sessionId;
 	sme_session_id = set_key_params->smesessionId;
-	session_entry = pe_find_session_by_session_id(mac_ctx, session_id);
+	session_entry = pe_find_session_by_sme_session_id(mac_ctx,
+							  sme_session_id);
+	session_id = session_entry->peSessionId;
+	pe_debug("PE session ID %d, SME session id %d", session_id,
+		 sme_session_id);
 	if (session_entry == NULL) {
 		pe_err("session does not exist for given session_id");
 		qdf_mem_free(msg->bodyptr);
@@ -2919,9 +2922,12 @@ void lim_process_mlm_set_bss_key_rsp(struct mac_context *mac_ctx,
 		pe_err("msg bodyptr is null");
 		return;
 	}
-	session_id = ((tpSetBssKeyParams) msg->bodyptr)->sessionId;
 	sme_session_id = ((tpSetBssKeyParams) msg->bodyptr)->smesessionId;
-	session_entry = pe_find_session_by_session_id(mac_ctx, session_id);
+	session_entry = pe_find_session_by_sme_session_id(mac_ctx,
+							  sme_session_id);
+	session_id = session_entry->peSessionId;
+	pe_debug("PE session ID %d, SME session id %d", session_id,
+		 sme_session_id);
 	if (session_entry == NULL) {
 		pe_err("session does not exist for given sessionId [%d]",
 			session_id);

+ 2 - 1
core/sap/src/sap_module.c

@@ -1390,7 +1390,8 @@ static QDF_STATUS wlan_sap_set_key_helper(struct sap_context *sap_ctx,
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	return ucfg_crypto_set_key_req(sap_ctx->vdev, crypto_key, true);
+	return ucfg_crypto_set_key_req(sap_ctx->vdev, crypto_key,
+				       WLAN_CRYPTO_KEY_TYPE_UNICAST);
 }
 #else
 static QDF_STATUS wlan_sap_set_key_helper(struct sap_context *sap_ctx,

+ 3 - 1
core/sme/src/csr/csr_api_roam.c

@@ -9695,7 +9695,9 @@ static QDF_STATUS csr_roam_issue_set_context_req(struct mac_context *mac_ctx,
 	    !add_key)
 		return QDF_STATUS_E_INVAL;
 
-	return ucfg_crypto_set_key_req(vdev, crypto_key, unicast);
+	return ucfg_crypto_set_key_req(vdev, crypto_key, (unicast ?
+				       WLAN_CRYPTO_KEY_TYPE_UNICAST :
+				       WLAN_CRYPTO_KEY_TYPE_GROUP));
 }
 
 QDF_STATUS csr_roam_issue_set_context_req_helper(

+ 3 - 0
core/wma/src/wma_features.c

@@ -5732,6 +5732,9 @@ void wma_update_set_key(uint8_t session_id, bool pairwise,
 		return;
 	}
 	iface = &wma->interfaces[session_id];
+	if (!iface)
+		wma_info("iface not found for session id %d", session_id);
+
 	wma_reset_ipn(iface, key_index);
 	if (iface && pairwise)
 		iface->ucast_key_cipher =