diff mbox series

[1/5] NAN: Refactor NAN module cleanup functions

Message ID 20260513065909.12048-3-andrei.otcheretianski@intel.com
State Accepted
Headers show
Series [1/5] NAN: Refactor NAN module cleanup functions | expand

Commit Message

Andrei Otcheretianski May 13, 2026, 6:59 a.m. UTC
From: Ilan Peer <ilan.peer@intel.com>

- When NAN is de-initialized also flush the state.
- As the NAN module maintains state even when it is not
  started, do not condition the flush flow with NAN
  being started. For example, NAN peers can be added while
  NAN is not started etc.
- As wpas_nan_stop() might not be called, i.e., only
  wpas_nan_deinit() is called, clear the NAN DE cluster
  ID in the nan_stop() callback (which is always called).

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
---
 src/nan/nan.c                   | 13 ++++++-------
 wpa_supplicant/nan_supplicant.c |  2 +-
 2 files changed, 7 insertions(+), 8 deletions(-)

Comments

Jouni Malinen May 20, 2026, 2:27 p.m. UTC | #1
Thanks, all five patches applied.
diff mbox series

Patch

diff --git a/src/nan/nan.c b/src/nan/nan.c
index e3fe12e84e..29c6eed457 100644
--- a/src/nan/nan.c
+++ b/src/nan/nan.c
@@ -273,7 +273,10 @@  static void nan_peer_clear_all(struct nan_data *nan)
 void nan_deinit(struct nan_data *nan)
 {
 	wpa_printf(MSG_DEBUG, "NAN: Deinit");
-	nan_peer_clear_all(nan);
+
+	nan_stop(nan);
+	nan_flush(nan);
+
 #ifdef CONFIG_PASN
 	pasn_initiator_pmksa_cache_deinit(nan->initiator_pmksa);
 	pasn_responder_pmksa_cache_deinit(nan->responder_pmksa);
@@ -414,12 +417,6 @@  void nan_flush(struct nan_data *nan)
 {
 	wpa_printf(MSG_DEBUG, "NAN: Reset internal state");
 
-	if (!nan->nan_started) {
-		wpa_printf(MSG_DEBUG, "NAN: Already stopped");
-		return;
-	}
-
-	nan->nan_started = 0;
 	nan_peer_clear_all(nan);
 	wpabuf_free(nan->sched.elems);
 	os_memset(&nan->sched, 0, sizeof(nan->sched));
@@ -457,7 +454,9 @@  void nan_stop(struct nan_data *nan)
 		nan->bigtk_id = 0;
 	}
 
+	/* Even though NAN is stopping, flush internal state */
 	nan_flush(nan);
+	nan->nan_started = 0;
 	nan->cfg->stop(nan->cfg->cb_ctx);
 }
 
diff --git a/wpa_supplicant/nan_supplicant.c b/wpa_supplicant/nan_supplicant.c
index 5d80489411..9ffd0ff946 100644
--- a/wpa_supplicant/nan_supplicant.c
+++ b/wpa_supplicant/nan_supplicant.c
@@ -194,6 +194,7 @@  static void wpas_nan_stop_cb(void *ctx)
 	}
 
 	wpa_drv_nan_stop(wpa_s);
+	nan_de_set_cluster_id(wpa_s->nan_de, NULL);
 }
 
 
@@ -1535,7 +1536,6 @@  int wpas_nan_stop(struct wpa_supplicant *wpa_s)
 		return -1;
 
 	nan_stop(wpa_s->nan);
-	nan_de_set_cluster_id(wpa_s->nan_de, NULL);
 
 	return 0;
 }