[PATCH] P2P: Fix PASN related memory leaks
Benjamin Berg
benjamin at sipsolutions.net
Tue Oct 7 04:31:09 PDT 2025
From: Benjamin Berg <benjamin.berg at intel.com>
The hwsim tests randomly expose a memory leak in a P2P test.
Unfortunately, it is not clear which exact flow or test is triggering
this memory leak. As such, this just fixes the leaks themselves rather
than adding e.g. a wpa_pasn_reset to fix it that way.
This should fix the seen leak reports:
1759239883.329003: MEMLEAK[0x550000592a10]: len 172
1759239883.329004: WPA_TRACE: memleak - START
1759239883.329004: [0]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(os_malloc+0x52) [0x550000070242]
1759239883.329004: os_malloc() ../src/utils/os_unix.c:740
1759239883.329004: [1]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(os_memdup+0x19) [0x550000070289]
1759239883.329005: os_memdup() ../src/utils/os_unix.c:532
1759239883.329005: [2]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(p2p_prepare_data_element+0xdf) [0x5500001067df]
1759239883.329005: p2p_prepare_data_element() ../src/p2p/p2p.c:6907
1759239883.329005: [3]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0xe0be7) [0x5500000e0be7]
1759239883.329006: wpas_p2p_prepare_data_element() p2p_supplicant.c:5679
1759239883.329006: [4]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(handle_auth_pasn_resp+0x192) [0x5500001d6bf2]
1759239883.329006: handle_auth_pasn_resp() ../src/pasn/pasn_responder.c:569
1759239883.329006: [5]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(handle_auth_pasn_1+0x43e) [0x5500001d767e]
1759239883.329007: handle_auth_pasn_1() ../src/pasn/pasn_responder.c:976
1759239883.329007: [6]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x107105) [0x550000107105]
1759239883.329007: p2p_handle_pasn_auth() ../src/p2p/p2p.c:7184
1759239883.329007: [7]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(p2p_pasn_auth_rx+0xb0) [0x550000107310]
1759239883.329008: p2p_pasn_auth_rx() ../src/p2p/p2p.c:7269
1759239883.329008: [8]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(wpas_p2p_pasn_auth_rx+0x46) [0x5500000f6836]
1759239883.329008: wpas_p2p_pasn_auth_rx() p2p_supplicant.c:11619
1759239883.329009: [9]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x2a4e01) [0x5500002a4e01]
1759239883.329009: wpas_pasn_auth() events.c:6251
1759239883.329009: [10]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(wpa_supplicant_event+0x17fb) [0x5500002af45b]
1759239883.329009: wpa_supplicant_event() events.c:6782
1759239883.329010: [11]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x2de5fc) [0x5500002de5fc]
1759239883.329010: mlme_event_mgmt() ../src/drivers/driver_nl80211_event.c:1451
1759239883.329010: [12]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x2deb01) [0x5500002deb01]
1759239883.329010: mlme_event() ../src/drivers/driver_nl80211_event.c:1884
1759239883.329011: [13]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(process_bss_event+0x18d) [0x5500002e1f2d]
1759239883.329011: process_bss_event() ../src/drivers/driver_nl80211_event.c:4549
1759239883.329011: [14]: /lib/x86_64-linux-gnu/libnl-3.so.200(nl_recvmsgs_report+0x391) [0x401c9861]
1759239883.329011: [15]: /lib/x86_64-linux-gnu/libnl-3.so.200(nl_recvmsgs+0xd) [0x401ca07d]
1759239883.329012: WPA_TRACE: memleak - END
1759239883.329012: MEMLEAK[0x550000551da0]: len 56
1759239883.329012: WPA_TRACE: memleak - START
1759239883.329012: [0]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(os_malloc+0x52) [0x550000070242]
1759239883.329013: os_malloc() ../src/utils/os_unix.c:740
1759239883.329013: [1]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(os_zalloc+0xe) [0x5500000704ee]
1759239883.329013: os_zalloc() ../src/utils/os_unix.c:798
1759239883.329013: [2]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(crypto_ec_init+0x23) [0x550000225cd3]
1759239883.329014: crypto_ec_init() ../src/crypto/crypto_openssl.c:2442
1759239883.329014: [3]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(crypto_ecdh_init+0x29) [0x550000226789]
1759239883.329014: crypto_ecdh_init() ../src/crypto/crypto_openssl.c:2748
1759239883.329014: [4]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(handle_auth_pasn_1+0x249) [0x5500001d7489]
1759239883.329015: handle_auth_pasn_1() ../src/pasn/pasn_responder.c:807
1759239883.329015: [5]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x107105) [0x550000107105]
1759239883.329015: p2p_handle_pasn_auth() ../src/p2p/p2p.c:7184
1759239883.329015: [6]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(p2p_pasn_auth_rx+0xb0) [0x550000107310]
1759239883.329016: p2p_pasn_auth_rx() ../src/p2p/p2p.c:7269
1759239883.329016: [7]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(wpas_p2p_pasn_auth_rx+0x46) [0x5500000f6836]
1759239883.329016: wpas_p2p_pasn_auth_rx() p2p_supplicant.c:11619
1759239883.329016: [8]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x2a4e01) [0x5500002a4e01]
1759239883.329017: wpas_pasn_auth() events.c:6251
1759239883.329017: [9]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(wpa_supplicant_event+0x17fb) [0x5500002af45b]
1759239883.329017: wpa_supplicant_event() events.c:6782
1759239883.329017: [10]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x2de5fc) [0x5500002de5fc]
1759239883.329018: mlme_event_mgmt() ../src/drivers/driver_nl80211_event.c:1451
1759239883.329018: [11]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x2deb01) [0x5500002deb01]
1759239883.329018: mlme_event() ../src/drivers/driver_nl80211_event.c:1884
1759239883.329019: [12]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(process_bss_event+0x18d) [0x5500002e1f2d]
1759239883.329019: process_bss_event() ../src/drivers/driver_nl80211_event.c:4549
1759239883.329019: [13]: /lib/x86_64-linux-gnu/libnl-3.so.200(nl_recvmsgs_report+0x391) [0x401c9861]
1759239883.329019: [14]: /lib/x86_64-linux-gnu/libnl-3.so.200(nl_recvmsgs+0xd) [0x401ca07d]
1759239883.329020: [15]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x2bd83f) [0x5500002bd83f]
1759239883.329020: wpa_driver_nl80211_event_receive() ../src/drivers/driver_nl80211.c:1932
1759239883.329020: WPA_TRACE: memleak - END
1759239883.329020: MEMLEAK[0x550000570410]: len 16
1759239883.329021: WPA_TRACE: memleak - START
1759239883.329021: [0]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(os_malloc+0x52) [0x550000070242]
1759239883.329021: os_malloc() ../src/utils/os_unix.c:740
1759239883.329021: [1]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(os_zalloc+0xe) [0x5500000704ee]
1759239883.329022: os_zalloc() ../src/utils/os_unix.c:798
1759239883.329022: [2]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(crypto_ecdh_init+0x19) [0x550000226779]
1759239883.329022: crypto_ecdh_init() ../src/crypto/crypto_openssl.c:2744
1759239883.329022: [3]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(handle_auth_pasn_1+0x249) [0x5500001d7489]
1759239883.329023: handle_auth_pasn_1() ../src/pasn/pasn_responder.c:807
1759239883.329023: [4]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x107105) [0x550000107105]
1759239883.329023: p2p_handle_pasn_auth() ../src/p2p/p2p.c:7184
1759239883.329023: [5]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(p2p_pasn_auth_rx+0xb0) [0x550000107310]
1759239883.329024: p2p_pasn_auth_rx() ../src/p2p/p2p.c:7269
1759239883.329024: [6]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(wpas_p2p_pasn_auth_rx+0x46) [0x5500000f6836]
1759239883.329024: wpas_p2p_pasn_auth_rx() p2p_supplicant.c:11619
1759239883.329024: [7]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x2a4e01) [0x5500002a4e01]
1759239883.329025: wpas_pasn_auth() events.c:6251
1759239883.329025: [8]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(wpa_supplicant_event+0x17fb) [0x5500002af45b]
1759239883.329025: wpa_supplicant_event() events.c:6782
1759239883.329025: [9]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x2de5fc) [0x5500002de5fc]
1759239883.329026: mlme_event_mgmt() ../src/drivers/driver_nl80211_event.c:1451
1759239883.329026: [10]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x2deb01) [0x5500002deb01]
1759239883.329026: mlme_event() ../src/drivers/driver_nl80211_event.c:1884
1759239883.329026: [11]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(process_bss_event+0x18d) [0x5500002e1f2d]
1759239883.329027: process_bss_event() ../src/drivers/driver_nl80211_event.c:4549
1759239883.329027: [12]: /lib/x86_64-linux-gnu/libnl-3.so.200(nl_recvmsgs_report+0x391) [0x401c9861]
1759239883.329027: [13]: /lib/x86_64-linux-gnu/libnl-3.so.200(nl_recvmsgs+0xd) [0x401ca07d]
1759239883.329027: [14]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x2bd83f) [0x5500002bd83f]
1759239883.329028: wpa_driver_nl80211_event_receive() ../src/drivers/driver_nl80211.c:1932
1759239883.329028: [15]: /home/bergbenj/upstream/hostap/tests/hwsim/../../wpa_supplicant/wpa_supplicant(+0x71a1d) [0x550000071a1d]
1759239883.329028: eloop_sock_table_dispatch() ../src/utils/eloop.c:606
1759239883.329028: WPA_TRACE: memleak - END
1759239883.329029: MEMLEAK: total 244 bytes
Fixes: e147d24a0775 ("P2P2: Add support for GO Negotiation wrapped in PASN auth frame")
Signed-off-by: Benjamin Berg <benjamin.berg at intel.com>
CC: Shivani Baranwal <quic_shivbara at quicinc.com>
---
src/p2p/p2p.c | 8 ++------
src/pasn/pasn_responder.c | 4 ++++
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index 43c0101eb3..cb2ecaef2e 100644
--- a/src/p2p/p2p.c
+++ b/src/p2p/p2p.c
@@ -6904,12 +6904,8 @@ int p2p_prepare_data_element(struct p2p_data *p2p, const u8 *peer_addr)
if (p2p_pasn_add_encrypted_data(p2p, dev, extra_ies) < 0)
p2p_dbg(p2p, "Failed to add PASN encrypted elements");
- pasn->extra_ies = os_memdup(wpabuf_head_u8(extra_ies),
- wpabuf_len(extra_ies));
- if (!pasn->extra_ies)
- goto out;
- pasn->extra_ies_len = wpabuf_len(extra_ies);
- ret = 0;
+ ret = pasn_set_extra_ies(pasn, wpabuf_head_u8(extra_ies),
+ wpabuf_len(extra_ies));
out:
wpabuf_free(extra_ies);
diff --git a/src/pasn/pasn_responder.c b/src/pasn/pasn_responder.c
index a4dc2a680f..e2b015f0af 100644
--- a/src/pasn/pasn_responder.c
+++ b/src/pasn/pasn_responder.c
@@ -804,6 +804,10 @@ int handle_auth_pasn_1(struct pasn_data *pasn,
return -1;
}
+ if (pasn->ecdh) {
+ crypto_ecdh_deinit(pasn->ecdh);
+ pasn->ecdh = NULL;
+ }
pasn->ecdh = crypto_ecdh_init(pasn_params.group);
if (!pasn->ecdh) {
wpa_printf(MSG_DEBUG, "PASN: Failed to init ECDH");
--
2.51.0
More information about the Hostap
mailing list