static int wnm_parse_candidate_list(struct wpa_supplicant *wpa_s,
const u8 *pos, const u8 *end)
{
- wpa_s->wnm_neighbor_report_elements = os_calloc(
- WNM_MAX_NEIGHBOR_REPORT,
- sizeof(struct neighbor_report));
- if (wpa_s->wnm_neighbor_report_elements == NULL)
- return -1;
-
while (end - pos >= 2 &&
wpa_s->wnm_num_neighbor_report < WNM_MAX_NEIGHBOR_REPORT) {
u8 tag = *pos++;
if (tag == WLAN_EID_NEIGHBOR_REPORT) {
struct neighbor_report *rep;
+ if (!wpa_s->wnm_num_neighbor_report) {
+ wpa_s->wnm_neighbor_report_elements = os_calloc(
+ WNM_MAX_NEIGHBOR_REPORT,
+ sizeof(struct neighbor_report));
+ if (!wpa_s->wnm_neighbor_report_elements)
+ return -1;
+ }
+
rep = &wpa_s->wnm_neighbor_report_elements[
wpa_s->wnm_num_neighbor_report];
wnm_parse_neighbor_report(wpa_s, pos, len, rep);
wpas_mbo_ie_trans_req(wpa_s, vendor + 2, vendor[1]);
#endif /* CONFIG_MBO */
- if (wpa_s->wnm_mode & WNM_BSS_TM_REQ_PREF_CAND_LIST_INCLUDED) {
- unsigned int valid_ms;
-
- wpa_msg(wpa_s, MSG_INFO, "WNM: Preferred List Available");
-
- if (wnm_parse_candidate_list(wpa_s, pos, end) < 0)
- goto reset;
+ if (wnm_parse_candidate_list(wpa_s, pos, end) < 0)
+ goto reset;
+ if (wpa_s->wnm_mode & WNM_BSS_TM_REQ_PREF_CAND_LIST_INCLUDED) {
if (!wpa_s->wnm_num_neighbor_report) {
wpa_printf(MSG_DEBUG,
"WNM: Candidate list included bit is set, but no candidates found");
NULL);
goto reset;
}
+ wpa_msg(wpa_s, MSG_INFO, "WNM: Preferred List Available");
+ }
+
+ if (wpa_s->wnm_num_neighbor_report) {
+ unsigned int valid_ms;
wnm_sort_cand_list(wpa_s);
wnm_dump_cand_list(wpa_s);