diff --git a/src/agent_map.c b/src/agent_map.c index a70ec17db7f8aedfe2972e9609cfa480dcc15095..3b67412ef1a238d45d1f31a7c6b00b6deb5d8dc8 100644 --- a/src/agent_map.c +++ b/src/agent_map.c @@ -2544,12 +2544,13 @@ error_cleanup: int handle_ap_autoconfig_wsc(void *agent, struct cmdu_buff *rx_cmdu, struct node *n) { + struct tlv *tv[AP_AUTOCONFIGURATION_WSC_M2_NUM_OF_TLV_TYPES][TLV_MAXNUM] = {0}; struct agent *a = (struct agent *) agent; - uint8_t bssid[6]; + uint8_t new_sha256[SHA256_LENGTH] = {0}; struct wifi_radio_element *radio; - struct tlv *tv[AP_AUTOCONFIGURATION_WSC_M2_NUM_OF_TLV_TYPES][TLV_MAXNUM] = {0}; + uint8_t wsc_mtype = 0; int ret = 0, num = 0; - uint8_t new_sha256[SHA256_LENGTH] = {0}; + uint8_t bssid[6]; #ifdef CHECK_PARTIAL_WIFI_RELOAD bool full_reconf_required = false; #endif /* CHECK_PARTIAL_WIFI_RELOAD */ @@ -2568,6 +2569,13 @@ int handle_ap_autoconfig_wsc(void *agent, struct cmdu_buff *rx_cmdu, return -1; } + wsc_mtype = wsc_get_message_type(tv[AP_AUTOCONFIGURATION_WSC_M2_WSC_IDX][0]->data, + tlv_length(tv[AP_AUTOCONFIGURATION_WSC_M2_WSC_IDX][0])); + if (wsc_mtype != WPS_M2) { + dbg("%s: WSC msg not M2, drop\n", __func__); + return -1; + } + memcpy(bssid, tv[AP_AUTOCONFIGURATION_WSC_M2_AP_RADIO_IDENTIFIER_IDX][0]->data, 6); radio = agent_get_radio(a, bssid);