[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