From 738fef2f0b9c4f8505b45b53cb290012ec59fbd2 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sat, 26 Feb 2022 13:39:35 +0200 Subject: [PATCH] Clear PSK explicitly from memory in couple more cases on deinit Couple of the WPS/P2P/RADIUS-PSK cases were freeing heap memory allocations without explicitly clearing the PSK value. Add such clearing for these to avoid leaving the PSK in memory after it is not needed anymore. Signed-off-by: Jouni Malinen --- src/ap/ieee802_11_auth.c | 2 +- src/ap/wps_hostapd.c | 3 ++- wpa_supplicant/p2p_supplicant.c | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ap/ieee802_11_auth.c b/src/ap/ieee802_11_auth.c index 783ee6dea..cf13008a1 100644 --- a/src/ap/ieee802_11_auth.c +++ b/src/ap/ieee802_11_auth.c @@ -646,6 +646,6 @@ void hostapd_free_psk_list(struct hostapd_sta_wpa_psk_short *psk) while (psk) { struct hostapd_sta_wpa_psk_short *prev = psk; psk = psk->next; - os_free(prev); + bin_clear_free(prev, sizeof(*prev)); } } diff --git a/src/ap/wps_hostapd.c b/src/ap/wps_hostapd.c index 4f1c76b7b..aacfa3372 100644 --- a/src/ap/wps_hostapd.c +++ b/src/ap/wps_hostapd.c @@ -1069,10 +1069,11 @@ static void hostapd_free_wps(struct wps_context *wps) for (i = 0; i < MAX_WPS_VENDOR_EXTENSIONS; i++) wpabuf_free(wps->dev.vendor_ext[i]); wps_device_data_free(&wps->dev); - os_free(wps->network_key); + bin_clear_free(wps->network_key, wps->network_key_len); hostapd_wps_nfc_clear(wps); wpabuf_free(wps->dh_pubkey); wpabuf_free(wps->dh_privkey); + forced_memzero(wps->psk, sizeof(wps->psk)); os_free(wps); } diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index ce44dfb9e..a996b436b 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -8825,7 +8825,7 @@ static void wpas_p2p_remove_client_go(struct wpa_supplicant *wpa_s, hapd->conf->ssid.wpa_psk = psk->next; rem = psk; psk = psk->next; - os_free(rem); + bin_clear_free(rem, sizeof(*rem)); } else { prev = psk; psk = psk->next;