qcacmn: Add PMK field to pmkid cache

In roaming offload, PMK will be sent to firmware.
So,save the PMK to pmkcache when supplicant provide
from os interface.

Change-Id: Ibfd3d354b9150b40755ba2ab1dd90c2e3c6ddbc3
CRs-Fixed: 2420359
This commit is contained in:
Liangwei Dong
2019-03-20 04:06:54 -04:00
committed by nshrivas
父節點 2f7256aa8b
當前提交 ca4abcf92f
共有 4 個文件被更改,包括 39 次插入13 次删除

查看文件

@@ -377,6 +377,7 @@ enum extn_element_ie {
#define WLAN_RSN_SELECTOR_LEN 4
#define WLAN_WPA_SELECTOR_LEN 4
#define PMKID_LEN 16
#define MAX_PMK_LEN 64
#define MAX_PMKID 4
#define WLAN_WPA_OUI 0xf25000

查看文件

@@ -804,6 +804,19 @@ QDF_STATUS wlan_crypto_set_key_req(struct wlan_objmgr_vdev *vdev,
return QDF_STATUS_SUCCESS;
}
#endif /* CRYPTO_SET_KEY_CONVERGED */
/**
* wlan_crypto_get_pmksa - called to get pmksa of bssid passed.
* @vdev: vdev
* @bssid: bssid
*
* This function gets called from to get pmksa for the bssid.
*
* Return: wlan_crypto_pmksa when match found else NULL.
*/
struct wlan_crypto_pmksa *
wlan_crypto_get_pmksa(struct wlan_objmgr_vdev *vdev,
struct qdf_mac_addr *bssid);
/**
* wlan_crypto_pmksa_flush - called to flush saved pmksa
* @crypto_params: crypto_params

查看文件

@@ -213,12 +213,16 @@ enum wlan_crypto_key_type {
/**
* struct wlan_crypto_pmksa - structure of crypto to contain pmkid
* @bssid: bssid for which pmkid is saved
* @pmkid: pmkid
* @pmkid: pmkid info
* @pmk: pmk info
* @pmk_len: pmk len
*/
struct wlan_crypto_pmksa {
struct qdf_mac_addr bssid;
uint8_t pmkid[PMKID_LEN];
uint8_t pmk[MAX_PMK_LEN];
uint8_t pmk_len;
};
/**

查看文件

@@ -331,6 +331,8 @@ QDF_STATUS wlan_crypto_set_pmksa(struct wlan_crypto_params *crypto_params,
if (qdf_is_macaddr_equal(&pmksa->bssid,
&crypto_params->pmksa[i]->bssid)) {
/* free the current pmksa and use this slot */
qdf_mem_zero(crypto_params->pmksa[i],
sizeof(struct wlan_crypto_pmksa));
qdf_mem_free(crypto_params->pmksa[i]);
crypto_params->pmksa[i] = pmksa;
return QDF_STATUS_SUCCESS;
@@ -339,7 +341,6 @@ QDF_STATUS wlan_crypto_set_pmksa(struct wlan_crypto_params *crypto_params,
if (i == WLAN_CRYPTO_MAX_PMKID && !slot_found) {
crypto_err("no entry available for pmksa");
qdf_mem_free(pmksa);
return QDF_STATUS_E_INVAL;
}
crypto_params->pmksa[first_available_slot] = pmksa;
@@ -359,6 +360,8 @@ QDF_STATUS wlan_crypto_del_pmksa(struct wlan_crypto_params *crypto_params,
continue;
if (qdf_is_macaddr_equal(&pmksa->bssid,
&crypto_params->pmksa[i]->bssid)) {
qdf_mem_zero(crypto_params->pmksa[i],
sizeof(struct wlan_crypto_pmksa));
qdf_mem_free(crypto_params->pmksa[i]);
crypto_params->pmksa[i] = NULL;
return QDF_STATUS_SUCCESS;
@@ -375,6 +378,8 @@ QDF_STATUS wlan_crypto_pmksa_flush(struct wlan_crypto_params *crypto_params)
for (i = 0; i < WLAN_CRYPTO_MAX_PMKID; i++) {
if (!crypto_params->pmksa[i])
continue;
qdf_mem_zero(crypto_params->pmksa[i],
sizeof(struct wlan_crypto_pmksa));
qdf_mem_free(crypto_params->pmksa[i]);
crypto_params->pmksa[i] = NULL;
}
@@ -420,16 +425,7 @@ QDF_STATUS wlan_crypto_set_del_pmksa(struct wlan_objmgr_vdev *vdev,
return status;
}
/**
* wlan_crypto_get_pmksa - called to get pmksa of bssid passed.
* @vdev: vdev
* @bssid: bssid
*
* This function gets called from to get pmksa for the bssid.
*
* Return: wlan_crypto_pmksa when match found else NULL.
*/
static struct wlan_crypto_pmksa *
struct wlan_crypto_pmksa *
wlan_crypto_get_pmksa(struct wlan_objmgr_vdev *vdev, struct qdf_mac_addr *bssid)
{
struct wlan_crypto_comp_priv *crypto_priv;
@@ -3835,6 +3831,18 @@ wlan_crypto_merge_prarams(struct wlan_crypto_params *dst_params,
dst_params->rsn_caps |= src_params->rsn_caps;
}
static void
wlan_crypto_reset_prarams(struct wlan_crypto_params *params)
{
params->authmodeset = 0;
params->ucastcipherset = 0;
params->mcastcipherset = 0;
params->mgmtcipherset = 0;
params->cipher_caps = 0;
params->key_mgmt = 0;
params->rsn_caps = 0;
}
QDF_STATUS wlan_set_vdev_crypto_prarams_from_ie(struct wlan_objmgr_vdev *vdev,
uint8_t *ie_ptr,
uint16_t ie_len)
@@ -3865,7 +3873,7 @@ QDF_STATUS wlan_set_vdev_crypto_prarams_from_ie(struct wlan_objmgr_vdev *vdev,
vdev_crypto_params = &crypto_priv->crypto_params;
qdf_mem_zero(vdev_crypto_params, sizeof(struct wlan_crypto_params));
wlan_crypto_reset_prarams(vdev_crypto_params);
status = wlan_get_crypto_params_from_rsn_ie(&crypto_params,
ie_ptr, ie_len);
if (QDF_STATUS_SUCCESS == status) {