[PATCH] dbus: Add FlushPMKSA method to D-Bus interface
Sbenazar
voroninan95ton at gmail.com
Fri Apr 3 03:57:10 PDT 2026
Expose PMKSA_FLUSH over D-Bus. The new FlushPMKSA method on
fi.w1.wpa_supplicant1.Interface does the same thing as the existing
control interface command: flushes PTKSA, PMKSA, and (with CONFIG_AP)
AP-side PMKSA caches. doc/dbus.doxygen updated too.
I hit this because NetworkManager only talks D-Bus and had no way to
flush the PMKSA cache before suspend. After resume the supplicant
tries to reconnect with a stale PMKID, and the AP rejects it:
10:26:22 PMKSA-CACHE-ADDED (stale, from before suspend)
10:26:23 ASSOC-REJECT status_code=53
10:26:23 PMKSA-CACHE-REMOVED, re-auth, PMKSA-CACHE-ADDED
10:26:46 Disconnected (reason=2, PREV_AUTH_NOT_VALID)
10:27:01 SSID temp-disabled after repeated failures
Happens on every SAE network I tested (two APs, 2.4/5 GHz, ath11k
WCN6855). Full journal available on request.
Related NM issues:
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1871
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1472
NM side (calls FlushPMKSA on disconnect):
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/2393
Signed-off-by: Sbenazar <voroninan95ton at gmail.com>
---
doc/dbus.doxygen | 5 +++++
wpa_supplicant/dbus/dbus_new.c | 6 ++++++
wpa_supplicant/dbus/dbus_new_handlers.c | 22 ++++++++++++++++++++++
wpa_supplicant/dbus/dbus_new_handlers.h | 3 +++
4 files changed, 36 insertions(+)
diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen
index fa73e8a..0a288d1 100644
--- a/doc/dbus.doxygen
+++ b/doc/dbus.doxygen
@@ -709,6 +709,11 @@ fi.w1.wpa_supplicant1.CreateInterface.
</dl>
</li>
+ <li>
+ <h3>FlushPMKSA ( ) --> nothing</h3>
+ <p>Flush PMKSA and PTKSA cache entries.</p>
+ </li>
+
<li>
<h3>SubscribeProbeReq ( ) --> nothing</h3>
<p>Subscribe to receive Probe Request events. This is needed in addition to registering a signal handler for the ProbeRequest signal to avoid flooding D-Bus with all Probe Request indications when no application is interested in them.</p>
diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c
index 2989002..7506f97 100644
--- a/wpa_supplicant/dbus/dbus_new.c
+++ b/wpa_supplicant/dbus/dbus_new.c
@@ -3715,6 +3715,12 @@ static const struct wpa_dbus_method_desc wpas_dbus_interface_methods[] = {
END_ARGS
}
},
+ { "FlushPMKSA", WPAS_DBUS_NEW_IFACE_INTERFACE,
+ (WPADBusMethodHandler) wpas_dbus_handler_flush_pmksa,
+ {
+ END_ARGS
+ }
+ },
#ifdef CONFIG_AP
{ "SubscribeProbeReq", WPAS_DBUS_NEW_IFACE_INTERFACE,
(WPADBusMethodHandler) wpas_dbus_handler_subscribe_preq,
diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c
index cb4a8a6..95a7df1 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers.c
+++ b/wpa_supplicant/dbus/dbus_new_handlers.c
@@ -13,6 +13,7 @@
#include "common.h"
#include "common/ieee802_11_defs.h"
#include "common/nan_de.h"
+#include "common/ptksa_cache.h"
#include "eap_peer/eap_methods.h"
#include "eapol_supp/eapol_supp_sm.h"
#include "rsn_supp/wpa.h"
@@ -2737,6 +2738,27 @@ DBusMessage * wpas_dbus_handler_flush_bss(DBusMessage *message,
}
+/*
+ * wpas_dbus_handler_flush_pmksa - Flush the PMKSA cache
+ * @message: Pointer to incoming dbus message
+ * @wpa_s: wpa_supplicant structure for a network interface
+ * Returns: NULL
+ *
+ * Handler function for "FlushPMKSA" method call of network interface.
+ */
+DBusMessage * wpas_dbus_handler_flush_pmksa(DBusMessage *message,
+ struct wpa_supplicant *wpa_s)
+{
+ ptksa_cache_flush(wpa_s->ptksa, NULL, WPA_CIPHER_NONE);
+ wpa_sm_pmksa_cache_flush(wpa_s->wpa, NULL);
+#ifdef CONFIG_AP
+ wpas_ap_pmksa_cache_flush(wpa_s);
+#endif /* CONFIG_AP */
+
+ return NULL;
+}
+
+
#ifdef CONFIG_AUTOSCAN
/**
* wpas_dbus_handler_autoscan - Set autoscan parameters for the interface
diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h
index 24ee678..e969757 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers.h
+++ b/wpa_supplicant/dbus/dbus_new_handlers.h
@@ -135,6 +135,9 @@ DBusMessage * wpas_dbus_handler_set_pkcs11_engine_and_module_path(
DBusMessage * wpas_dbus_handler_flush_bss(DBusMessage *message,
struct wpa_supplicant *wpa_s);
+DBusMessage * wpas_dbus_handler_flush_pmksa(DBusMessage *message,
+ struct wpa_supplicant *wpa_s);
+
DBusMessage * wpas_dbus_handler_autoscan(DBusMessage *message,
struct wpa_supplicant *wpa_s);
--
2.53.0
More information about the Hostap
mailing list