* [PATCH v3 2/3] dpp: use the new config->ssid member
2023-11-16 19:15 [PATCH v3 1/3] dpp-util: store SSID as string, not raw buffer James Prestwood
@ 2023-11-16 19:15 ` James Prestwood
2023-11-16 19:15 ` [PATCH v3 3/3] dpp: use the config's SSID to process scan results James Prestwood
2023-11-17 15:48 ` [PATCH v3 1/3] dpp-util: store SSID as string, not raw buffer Denis Kenzior
2 siblings, 0 replies; 4+ messages in thread
From: James Prestwood @ 2023-11-16 19:15 UTC (permalink / raw)
To: iwd; +Cc: James Prestwood
This is now a NULL terminated string so it can be used directly.
---
src/dpp.c | 31 ++++++++++++-------------------
1 file changed, 12 insertions(+), 19 deletions(-)
diff --git a/src/dpp.c b/src/dpp.c
index 36d5d62e..907f3bf5 100644
--- a/src/dpp.c
+++ b/src/dpp.c
@@ -809,16 +809,12 @@ static void send_config_result(struct dpp_sm *dpp, const uint8_t *to)
static void dpp_write_config(struct dpp_configuration *config,
struct network *network)
{
- char ssid[33];
_auto_(l_settings_free) struct l_settings *settings = l_settings_new();
_auto_(l_free) char *path;
_auto_(l_free) uint8_t *psk = NULL;
size_t psk_len;
- memcpy(ssid, config->ssid, config->ssid_len);
- ssid[config->ssid_len] = '\0';
-
- path = storage_get_network_file_path(SECURITY_PSK, ssid);
+ path = storage_get_network_file_path(SECURITY_PSK, config->ssid);
if (l_settings_load_from_file(settings, path)) {
/* Remove any existing Security keys */
@@ -841,9 +837,9 @@ static void dpp_write_config(struct dpp_configuration *config,
network_set_psk(network, psk);
}
- l_debug("Storing credential for '%s(%s)'", ssid,
+ l_debug("Storing credential for '%s(%s)'", config->ssid,
security_to_str(SECURITY_PSK));
- storage_network_sync(SECURITY_PSK, ssid, settings);
+ storage_network_sync(SECURITY_PSK, config->ssid, settings);
}
static void dpp_scan_triggered(int err, void *user_data)
@@ -932,8 +928,6 @@ static void dpp_handle_config_response_frame(const struct mmpdu_header *frame,
struct station *station = station_find(netdev_get_ifindex(dpp->netdev));
struct network *network = NULL;
struct scan_bss *bss = NULL;
- char ssid[33];
- size_t ssid_len;
if (dpp->state != DPP_STATE_CONFIGURING)
return;
@@ -1062,17 +1056,13 @@ static void dpp_handle_config_response_frame(const struct mmpdu_header *frame,
* credentials out and be done
*/
if (station) {
- memcpy(ssid, config->ssid, config->ssid_len);
- ssid_len = config->ssid_len;
- ssid[config->ssid_len] = '\0';
-
- network = station_network_find(station, ssid, SECURITY_PSK);
+ network = station_network_find(station, config->ssid,
+ SECURITY_PSK);
if (network)
bss = network_bss_select(network, true);
}
dpp_write_config(config, network);
- dpp_configuration_free(config);
send_config_result(dpp, dpp->peer_addr);
@@ -1084,19 +1074,22 @@ static void dpp_handle_config_response_frame(const struct mmpdu_header *frame,
else if (station) {
struct scan_parameters params = {0};
- params.ssid = (void *) ssid;
- params.ssid_len = ssid_len;
+ params.ssid = (void *) config->ssid;
+ params.ssid_len = config->ssid_len;
- l_debug("Scanning for %s", ssid);
+ l_debug("Scanning for %s", config->ssid);
dpp->connect_scan_id = scan_active_full(dpp->wdev_id, ¶ms,
dpp_scan_triggered,
dpp_scan_results, dpp,
dpp_scan_destroy);
- if (dpp->connect_scan_id)
+ if (dpp->connect_scan_id) {
+ dpp_configuration_free(config);
return;
+ }
}
+ dpp_configuration_free(config);
dpp_reset(dpp);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH v3 3/3] dpp: use the config's SSID to process scan results
2023-11-16 19:15 [PATCH v3 1/3] dpp-util: store SSID as string, not raw buffer James Prestwood
2023-11-16 19:15 ` [PATCH v3 2/3] dpp: use the new config->ssid member James Prestwood
@ 2023-11-16 19:15 ` James Prestwood
2023-11-17 15:48 ` [PATCH v3 1/3] dpp-util: store SSID as string, not raw buffer Denis Kenzior
2 siblings, 0 replies; 4+ messages in thread
From: James Prestwood @ 2023-11-16 19:15 UTC (permalink / raw)
To: iwd; +Cc: James Prestwood
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 --git a/src/dpp.c b/src/dpp.c
index 907f3bf5..f8d76805 100644
--- a/src/dpp.c
+++ b/src/dpp.c
@@ -856,7 +856,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)
@@ -872,18 +871,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);
@@ -1084,7 +1083,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;
}
}
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread