qcacmn: Reject STA with PMF disabled only when PMF is required

In wlan_crypto_rsn_info, only need to reject STA with PMF disabled
when PMF is required.

Change-Id: I7a7d4b2d1a2d44a95d08eb6bfac14540940f0be3
CRs-Fixed: 2424932
This commit is contained in:
Min Liu
2019-03-25 11:48:49 +08:00
committad av nshrivas
förälder bc3bde34bf
incheckning a3bad2b70e
2 ändrade filer med 41 tillägg och 1 borttagningar

Visa fil

@@ -222,6 +222,16 @@ QDF_STATUS wlan_crypto_demic(struct wlan_objmgr_vdev *vdev,
*/
bool wlan_crypto_vdev_is_pmf_enabled(struct wlan_objmgr_vdev *vdev);
/**
* wlan_crypto_vdev_is_pmf_required - called to check is pmf required in vdev
* @vdev: vdev
*
* This function gets called to check is pmf required or not in vdev.
*
* Return: true or false
*/
bool wlan_crypto_vdev_is_pmf_required(struct wlan_objmgr_vdev *vdev);
/**
* wlan_crypto_is_pmf_enabled - called by mgmt txrx to check is pmf enabled
* @vdev: vdev

Visa fil

@@ -1645,6 +1645,36 @@ bool wlan_crypto_vdev_is_pmf_enabled(struct wlan_objmgr_vdev *vdev)
return false;
}
/**
* wlan_crypto_vdev_is_pmf_required - called to check is pmf required in vdev
* @vdev: vdev
*
* This function gets called to check is pmf required or not in vdev.
*
* Return: true or false
*/
bool wlan_crypto_vdev_is_pmf_required(struct wlan_objmgr_vdev *vdev)
{
struct wlan_crypto_comp_priv *crypto_priv;
struct wlan_crypto_params *vdev_crypto_params;
if (!vdev)
return false;
vdev_crypto_params = wlan_crypto_vdev_get_comp_params(vdev,
&crypto_priv);
if (!crypto_priv) {
crypto_err("crypto_priv NULL");
return QDF_STATUS_E_INVAL;
}
if (vdev_crypto_params->rsn_caps & WLAN_CRYPTO_RSN_CAP_MFP_REQUIRED)
return true;
return false;
}
/**
* wlan_crypto_is_pmf_enabled - called by mgmt txrx to check is pmf enabled
* @vdev: vdev
@@ -2808,7 +2838,7 @@ bool wlan_crypto_rsn_info(struct wlan_objmgr_vdev *vdev,
crypto_debug("Key mgmt match failed");
return false;
}
if (wlan_crypto_vdev_is_pmf_enabled(vdev) &&
if (wlan_crypto_vdev_is_pmf_required(vdev) &&
!(crypto_params->rsn_caps & WLAN_CRYPTO_RSN_CAP_MFP_ENABLED)) {
crypto_debug("Peer is not PMF capable");
return false;