diff --git a/umac/cmn_services/crypto/inc/wlan_crypto_global_api.h b/umac/cmn_services/crypto/inc/wlan_crypto_global_api.h index 4010f4b29a5b..43efd71f18de 100644 --- a/umac/cmn_services/crypto/inc/wlan_crypto_global_api.h +++ b/umac/cmn_services/crypto/inc/wlan_crypto_global_api.h @@ -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 diff --git a/umac/cmn_services/crypto/src/wlan_crypto_global_api.c b/umac/cmn_services/crypto/src/wlan_crypto_global_api.c index 39fdf9700e56..5bc4b007bf4a 100644 --- a/umac/cmn_services/crypto/src/wlan_crypto_global_api.c +++ b/umac/cmn_services/crypto/src/wlan_crypto_global_api.c @@ -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;