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

Andrei Otcheretianski andrei.otcheretianski at intel.com
Tue May 12 23:59:01 PDT 2026


From: Ilan Peer <ilan.peer at 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 at intel.com>
---
 src/nan/nan.c                   | 13 ++++++-------
 wpa_supplicant/nan_supplicant.c |  2 +-
 2 files changed, 7 insertions(+), 8 deletions(-)

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;
 }
-- 
2.53.0




More information about the Hostap mailing list