[PATCH 85/92] NAN: Unpair a peer before the NMI station is removed

Andrei Otcheretianski andrei.otcheretianski at intel.com
Wed Apr 22 05:24:16 PDT 2026


From: Ilan Peer <ilan.peer at intel.com>

Since once a NMI station is removed from the kernel, the peer
can no longer be considered as paired since there are no keys
installed etc.

Signed-off-by: Ilan Peer <ilan.peer at intel.com>
---
 src/nan/nan.h                   |  6 ++++++
 src/nan/nan_pairing.c           | 16 ++++++++++++++++
 wpa_supplicant/nan_supplicant.c |  3 +++
 3 files changed, 25 insertions(+)

diff --git a/src/nan/nan.h b/src/nan/nan.h
index 2beb0dbc2c..dce9354b32 100644
--- a/src/nan/nan.h
+++ b/src/nan/nan.h
@@ -770,6 +770,7 @@ int nan_pairing_set_nik(struct nan_data *nan, const u8 *nik, size_t nik_len);
 int nan_pairing_set_nik_lifetime(struct nan_data *nan, u32 lifetime);
 bool nan_pairing_is_peer_paired(struct nan_data *nan_data, const u8 *peer_addr);
 int nan_pairing_abort(struct nan_data *nan_data, const u8 *peer_addr);
+void nan_pairing_unpair_peer(struct nan_data *nan_data, const u8 *peer_addr);
 #else
 static inline int nan_pairing_add_attrs(struct nan_data *nan_data,
 					struct wpabuf *buf)
@@ -806,6 +807,11 @@ bool nan_pairing_is_peer_paired(struct nan_data *nan_data, const u8 *peer_addr)
 {
 	return false;
 }
+
+static inline
+void nan_pairing_unpair_peer(struct nan_data *nan_data, const u8 *peer_addr)
+{}
+
 #endif /* CONFIG_PASN */
 
 #endif /* NAN_H */
diff --git a/src/nan/nan_pairing.c b/src/nan/nan_pairing.c
index 029486a385..eff743125e 100644
--- a/src/nan/nan_pairing.c
+++ b/src/nan/nan_pairing.c
@@ -1551,3 +1551,19 @@ bool nan_pairing_is_peer_paired(struct nan_data *nan_data, const u8 *peer_addr)
 
 	return !!(peer->pairing.flags & NAN_PAIRING_FLAG_PAIRED);
 }
+
+
+void nan_pairing_unpair_peer(struct nan_data *nan_data, const u8 *peer_addr)
+{
+	struct nan_peer *peer;
+
+	peer = nan_get_peer(nan_data, peer_addr);
+	if (!peer)
+		return;
+
+	wpa_printf(MSG_DEBUG, "NAN: Unpair peer " MACSTR,
+		   MAC2STR(peer->nmi_addr));
+
+	peer->pairing.flags &= ~NAN_PAIRING_FLAG_PAIRED;
+	nan_pairing_deinit_peer(peer);
+}
diff --git a/wpa_supplicant/nan_supplicant.c b/wpa_supplicant/nan_supplicant.c
index c083c4ade8..ac8294d53e 100644
--- a/wpa_supplicant/nan_supplicant.c
+++ b/wpa_supplicant/nan_supplicant.c
@@ -305,6 +305,9 @@ static int wpas_nan_set_peer_schedule_cb(void *ctx, const u8 *nmi_addr,
 
 	if (!sched && !new_sta) {
 		/* TODO: Should we maybe keep that NMI station? */
+		wpa_printf(MSG_DEBUG, "NAN: Unpair NMI station before removal");
+		nan_pairing_unpair_peer(wpa_s->nan, nmi_addr);
+
 		wpa_printf(MSG_DEBUG, "NAN: Remove NMI station");
 		ret = wpa_drv_sta_remove(wpa_s, nmi_addr);
 		if (ret)
-- 
2.53.0




More information about the Hostap mailing list