[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