|
@@ -3325,6 +3325,8 @@ int wma_process_bip(tp_wma_handle wma_handle,
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+ WMA_LOGD(FL("key_cipher %d key_id %d"), iface->key.key_cipher, key_id);
|
|
|
+
|
|
|
switch (iface->key.key_cipher) {
|
|
|
case WMI_CIPHER_AES_CMAC:
|
|
|
if (wmi_service_enabled(wma_handle->wmi_handle,
|
|
@@ -3350,15 +3352,27 @@ int wma_process_bip(tp_wma_handle wma_handle,
|
|
|
break;
|
|
|
|
|
|
case WMI_CIPHER_AES_GMAC:
|
|
|
- if (cds_is_gmac_mmie_valid(iface->key.key,
|
|
|
- iface->key.key_id[key_id - WMA_IGTK_KEY_INDEX_4].ipn,
|
|
|
- (uint8_t *) wh, efrm, iface->key.key_length)) {
|
|
|
- WMA_LOGD(FL("Protected BC/MC frame GMAC MMIE validation successful"));
|
|
|
- /* Remove MMIE */
|
|
|
+ if (wmi_service_enabled(wma_handle->wmi_handle,
|
|
|
+ wmi_service_gmac_offload_support)) {
|
|
|
+ /*
|
|
|
+ * if gmac offload is enabled then mmie validation is
|
|
|
+ * performed in firmware, host just need to trim the
|
|
|
+ * mmie.
|
|
|
+ */
|
|
|
+ WMA_LOGD(FL("Trim GMAC MMIE"));
|
|
|
qdf_nbuf_trim_tail(wbuf, cds_get_gmac_mmie_size());
|
|
|
} else {
|
|
|
- WMA_LOGD(FL("BC/MC GMAC MIC error or MMIE not present, dropping the frame"));
|
|
|
- return -EINVAL;
|
|
|
+ if (cds_is_gmac_mmie_valid(iface->key.key,
|
|
|
+ iface->key.key_id[key_id - WMA_IGTK_KEY_INDEX_4].ipn,
|
|
|
+ (uint8_t *) wh, efrm, iface->key.key_length)) {
|
|
|
+ WMA_LOGD(FL("Protected BC/MC frame GMAC MMIE validation successful"));
|
|
|
+ /* Remove MMIE */
|
|
|
+ qdf_nbuf_trim_tail(wbuf,
|
|
|
+ cds_get_gmac_mmie_size());
|
|
|
+ } else {
|
|
|
+ WMA_LOGD(FL("BC/MC GMAC MIC error or MMIE not present, dropping the frame"));
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
}
|
|
|
break;
|
|
|
|