[PATCH 04/92] NAN: improve and fix NAN device type checking

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


From: Benjamin Berg <benjamin.berg at intel.com>

There was a bug that a P2P device interface would be created for a NAN
data interface. Add a helper function that checks for either NAN
management or NAN data interface types and use that in various places.
Fix the checks before calls to wpas_p2p_add_p2pdev_interface and also
switch other places to use it.

Signed-off-by: Benjamin Berg <benjamin.berg at intel.com>
---
 wpa_supplicant/events.c           | 3 ++-
 wpa_supplicant/wpa_supplicant.c   | 2 +-
 wpa_supplicant/wpa_supplicant_i.h | 9 +++++++++
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 117d96a281..c559e52879 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -5310,6 +5310,7 @@ wpa_supplicant_event_interface_status(struct wpa_supplicant *wpa_s,
 		if (!wpa_s->global->p2p &&
 		    !wpa_s->global->p2p_disabled &&
 		    !wpa_s->conf->p2p_disabled &&
+		    !wpas_is_nan_iface(wpa_s) &&
 		    (wpa_s->drv_flags &
 		     WPA_DRIVER_FLAGS_DEDICATED_P2P_DEVICE) &&
 		    wpas_p2p_add_p2pdev_interface(
@@ -6899,7 +6900,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
 			break;
 #endif /* CONFIG_PASN */
 
-		if (wpa_s->nan_mgmt &&
+		if (wpas_is_nan_iface(wpa_s) &&
 		    data->tx_status.type == WLAN_FC_TYPE_MGMT &&
 		    data->tx_status.stype == WLAN_FC_STYPE_ACTION &&
 		    wpas_nan_tx_status(wpa_s, data->tx_status.data,
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index 2b9512a15c..5414eab0fb 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -8372,7 +8372,7 @@ struct wpa_supplicant * wpa_supplicant_add_iface(struct wpa_global *global,
 	wpa_supplicant_set_state(wpa_s, WPA_DISCONNECTED);
 
 #ifdef CONFIG_P2P
-	if (!wpa_s->global->p2p && !iface->nan_mgmt &&
+	if (!wpa_s->global->p2p && !wpas_is_nan_iface(wpa_s) &&
 	    !wpa_s->global->p2p_disabled && !wpa_s->conf->p2p_disabled &&
 	    (wpa_s->drv_flags & WPA_DRIVER_FLAGS_DEDICATED_P2P_DEVICE) &&
 	    wpas_p2p_add_p2pdev_interface(
diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h
index df449c7550..f69685004f 100644
--- a/wpa_supplicant/wpa_supplicant_i.h
+++ b/wpa_supplicant/wpa_supplicant_i.h
@@ -2177,4 +2177,13 @@ void wpas_update_dfs_ap_info(struct wpa_supplicant *wpa_s, int freq,
 			     bool disconnect_evt);
 void wpas_configure_frame_filters(struct wpa_supplicant *wpa_s);
 
+static inline bool wpas_is_nan_iface(struct wpa_supplicant *wpa_s)
+{
+#if defined(CONFIG_NAN)
+	return wpa_s->nan_mgmt || wpa_s->nan_data;
+#else
+	return false;
+#endif
+}
+
 #endif /* WPA_SUPPLICANT_I_H */
-- 
2.53.0




More information about the Hostap mailing list