diff --git a/core/mac/src/pe/lim/lim_process_fils.c b/core/mac/src/pe/lim/lim_process_fils.c index 013063c7e92e..85e81a922ed8 100644 --- a/core/mac/src/pe/lim/lim_process_fils.c +++ b/core/mac/src/pe/lim/lim_process_fils.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -1778,8 +1778,7 @@ bool lim_verify_fils_params_assoc_rsp(struct mac_context *mac_ctx, { struct pe_fils_session *fils_info = session_entry->fils_info; tDot11fIEfils_session fils_session = assoc_rsp->fils_session; - tDot11fIEfils_key_confirmation fils_key_auth = assoc_rsp->fils_key_auth; - tDot11fIEfils_kde fils_kde = assoc_rsp->fils_kde; + tDot11fIEfils_key_confirmation *fils_key_auth; QDF_STATUS status; if (!lim_is_fils_connection(session_entry)) @@ -1802,28 +1801,39 @@ bool lim_verify_fils_params_assoc_rsp(struct mac_context *mac_ctx, goto verify_fils_params_fails; } + fils_key_auth = qdf_mem_malloc(sizeof(*fils_key_auth)); + if (!fils_key_auth) + goto verify_fils_params_fails; + + *fils_key_auth = assoc_rsp->fils_key_auth; + /* Compare FILS key auth */ - if ((fils_key_auth.num_key_auth != fils_info->key_auth_len) || - qdf_mem_cmp(fils_info->ap_key_auth_data, fils_key_auth.key_auth, - fils_info->ap_key_auth_len)) { + if (fils_key_auth->num_key_auth != fils_info->key_auth_len || + qdf_mem_cmp(fils_info->ap_key_auth_data, + fils_key_auth->key_auth, + fils_info->ap_key_auth_len)) { lim_fils_data_dump("session keyauth", fils_info->ap_key_auth_data, fils_info->ap_key_auth_len); lim_fils_data_dump("Pkt keyauth", - fils_key_auth.key_auth, - fils_key_auth.num_key_auth); + fils_key_auth->key_auth, + fils_key_auth->num_key_auth); + qdf_mem_free(fils_key_auth); goto verify_fils_params_fails; } + qdf_mem_free(fils_key_auth); + /* Verify the Key Delivery Element presence */ - if (!fils_kde.num_kde_list) { + if (!assoc_rsp->fils_kde.num_kde_list) { pe_err("FILS KDE list absent"); goto verify_fils_params_fails; } /* Derive KDE elements */ - status = lim_parse_kde_elements(mac_ctx, fils_info, fils_kde.kde_list, - fils_kde.num_kde_list); + status = lim_parse_kde_elements(mac_ctx, fils_info, + assoc_rsp->fils_kde.kde_list, + assoc_rsp->fils_kde.num_kde_list); if (!QDF_IS_STATUS_SUCCESS(status)) { pe_err("KDE parsing fails"); goto verify_fils_params_fails;