diff mbox series

[v2,3/3] dpp: use the config's SSID to process scan results

Message ID 20231116184459.292601-3-prestwoj@gmail.com (mailing list archive)
State New
Headers show
Series [v2,1/3] dpp-util: store SSID as string, not raw buffer | expand

Commit Message

James Prestwood Nov. 16, 2023, 6:44 p.m. UTC
The scan result handling was fragile because it assumed the kernel
would only give results matching the requested SSID. This isn't
something we should assume so instead keep the configuration object
around until after the scan and use the target SSID to lookup the
network.
---
 src/dpp.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)
diff mbox series

Patch

diff --git a/src/dpp.c b/src/dpp.c
index b1f9c5ac..fab114ad 100644
--- a/src/dpp.c
+++ b/src/dpp.c
@@ -861,7 +861,6 @@  static bool dpp_scan_results(int err, struct l_queue *bss_list,
 	struct dpp_sm *dpp = userdata;
 	struct station *station = station_find(netdev_get_ifindex(dpp->netdev));
 	struct scan_bss *bss;
-	char ssid[33];
 	struct network *network;
 
 	if (err < 0)
@@ -877,18 +876,18 @@  static bool dpp_scan_results(int err, struct l_queue *bss_list,
 	if (L_WARN_ON(station_get_connected_network(station)))
 		goto reset;
 
-	/* Purely for grabbing the SSID */
-	bss = l_queue_peek_head(bss_list);
-
-	memcpy(ssid, bss->ssid, bss->ssid_len);
-	ssid[bss->ssid_len] = '\0';
-
 	station_set_scan_results(station, bss_list, freqs, false);
 
-	network = station_network_find(station, ssid, SECURITY_PSK);
+	network = station_network_find(station, dpp->config->ssid,
+					SECURITY_PSK);
 
 	dpp_reset(dpp);
 
+	if (!network) {
+		l_debug("Network was not found after scanning");
+		return true;
+	}
+
 	bss = network_bss_select(network, true);
 	network_autoconnect(network, bss);
 
@@ -1089,7 +1088,7 @@  static void dpp_handle_config_response_frame(const struct mmpdu_header *frame,
 						dpp_scan_results, dpp,
 						dpp_scan_destroy);
 		if (dpp->connect_scan_id) {
-			dpp_configuration_free(config);
+			dpp->config = config;
 			return;
 		}
 	}