From 7a801854bffc1100559b9cda2e9fd738e894f2cd Mon Sep 17 00:00:00 2001
From: Jakob Olsson <jakob.olsson@iopsys.eu>
Date: Tue, 4 Feb 2025 13:21:12 +0100
Subject: [PATCH] wsc: discard m1 before processing

---
 src/agent_map.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/agent_map.c b/src/agent_map.c
index a70ec17db..3b67412ef 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);
-- 
GitLab