]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
PR: Clear PASN PMKSA cache on control interface FLUSH
authorJouni Malinen <jouni.malinen@oss.qualcomm.com>
Fri, 17 Oct 2025 09:33:34 +0000 (12:33 +0300)
committerJouni Malinen <j@w1.fi>
Fri, 17 Oct 2025 10:23:21 +0000 (13:23 +0300)
This is needed for testing purposes to prevent use of PMKSA caching.

Signed-off-by: Jouni Malinen <jouni.malinen@oss.qualcomm.com>
src/common/proximity_ranging.c
src/common/proximity_ranging.h
wpa_supplicant/ctrl_iface.c
wpa_supplicant/pr_supplicant.c
wpa_supplicant/pr_supplicant.h

index cc18e4d571ebeccb08038f1d5d89c1ade79b9d6b..d18e2dac1e1ab3a37e3ffc8937299a2502675f30 100644 (file)
@@ -122,6 +122,16 @@ static void pr_deinit_dev_iks(struct pr_data *pr)
 }
 
 
+void pr_flush(struct pr_data *pr)
+{
+#ifdef CONFIG_PASN
+       if (pr->initiator_pmksa)
+               pasn_initiator_pmksa_cache_flush(pr->initiator_pmksa);
+       if (pr->responder_pmksa)
+               pasn_responder_pmksa_cache_flush(pr->responder_pmksa);
+#endif /* CONFIG_PASN */
+}
+
 void pr_deinit(struct pr_data *pr)
 {
        struct pr_device *dev, *prev;
index 82204e840fec68e64e6e191db32a512ea0830ce0..af9676f1c8e4891e679cbfc65d807828be62beab 100644 (file)
@@ -479,6 +479,7 @@ struct operation_mode {
 };
 
 struct pr_data * pr_init(const struct pr_config *cfg);
+void pr_flush(struct pr_data *pr);
 void pr_deinit(struct pr_data *pr);
 void pr_set_dev_addr(struct pr_data *pr, const u8 *addr);
 void pr_clear_dev_iks(struct pr_data *pr);
index 6a39b939407b88a688e9b721acc8df776476675f..519667e3a4cd00e8a55650926028e990e65f0403 100644 (file)
@@ -9181,6 +9181,8 @@ static void wpa_supplicant_ctrl_iface_flush(struct wpa_supplicant *wpa_s)
 #ifdef CONFIG_NAN_USD
        wpas_nan_usd_flush(wpa_s);
 #endif /* CONFIG_NAN_USD */
+
+       wpas_pr_flush(wpa_s);
 }
 
 
index 125b404d0ce73bc559e0edeb8bfa20e123d2ed90..4bdff8971a6a58aa8930e1accb7321b405c8be77 100644 (file)
@@ -413,6 +413,14 @@ int wpas_pr_init(struct wpa_global *global, struct wpa_supplicant *wpa_s,
 }
 
 
+void wpas_pr_flush(struct wpa_supplicant *wpa_s)
+{
+       struct pr_data *pr = wpa_s->global->pr;
+
+       if (pr)
+               pr_flush(pr);
+}
+
 void wpas_pr_deinit(struct wpa_supplicant *wpa_s)
 {
        if (wpa_s == wpa_s->global->pr_init_wpa_s) {
index a469f0afd5391c2444bbac62cacf228f860223fc..eceafaf86b17783f249437345237fab7038accb9 100644 (file)
@@ -13,6 +13,7 @@
 
 int wpas_pr_init(struct wpa_global *global, struct wpa_supplicant *wpa_s,
                 const struct wpa_driver_capa *capa);
+void wpas_pr_flush(struct wpa_supplicant *wpa_s);
 void wpas_pr_deinit(struct wpa_supplicant *wpa_s);
 void wpas_pr_update_dev_addr(struct wpa_supplicant *wpa_s);
 void wpas_pr_clear_dev_iks(struct wpa_supplicant *wpa_s);
@@ -41,6 +42,10 @@ static inline int wpas_pr_init(struct wpa_global *global,
        return -1;
 }
 
+static inline void wpas_pr_flush(struct wpa_supplicant *wpa_s)
+{
+}
+
 static inline void wpas_pr_deinit(struct wpa_supplicant *wpa_s)
 {
 }