mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
wpa_supplicant : Fixed a memory leak issue created when parsing scan results
This commit is contained in:
parent
d1b3b6a577
commit
7d7481845f
@ -597,6 +597,7 @@ wps_parse_scan_result(struct wps_scan_ie *scan)
|
|||||||
for (count = 0; count < WPS_MAX_DIS_AP_NUM; count++) {
|
for (count = 0; count < WPS_MAX_DIS_AP_NUM; count++) {
|
||||||
if (os_memcmp(sm->dis_ap_list[count].bssid, scan->bssid, ETH_ALEN) == 0) {
|
if (os_memcmp(sm->dis_ap_list[count].bssid, scan->bssid, ETH_ALEN) == 0) {
|
||||||
wpa_printf(MSG_INFO, "discard ap bssid "MACSTR, MAC2STR(scan->bssid));
|
wpa_printf(MSG_INFO, "discard ap bssid "MACSTR, MAC2STR(scan->bssid));
|
||||||
|
wpabuf_free(buf);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -605,6 +606,9 @@ wps_parse_scan_result(struct wps_scan_ie *scan)
|
|||||||
|
|
||||||
if (ap_found || sm->wps_pin_war) {
|
if (ap_found || sm->wps_pin_war) {
|
||||||
wpabuf_free(buf);
|
wpabuf_free(buf);
|
||||||
|
if (scan->ssid[1] > SSID_MAX_LEN) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
esp_wifi_enable_sta_privacy_internal();
|
esp_wifi_enable_sta_privacy_internal();
|
||||||
os_memset(sm->config.ssid, 0, sizeof(sm->config.ssid));
|
os_memset(sm->config.ssid, 0, sizeof(sm->config.ssid));
|
||||||
strncpy((char *)sm->config.ssid, (char *)&scan->ssid[2], (int)scan->ssid[1]);
|
strncpy((char *)sm->config.ssid, (char *)&scan->ssid[2], (int)scan->ssid[1]);
|
||||||
@ -1677,6 +1681,9 @@ _err:
|
|||||||
sm->dev = NULL;
|
sm->dev = NULL;
|
||||||
}
|
}
|
||||||
if (sm->wps_ctx) {
|
if (sm->wps_ctx) {
|
||||||
|
if (sm->wps_ctx->dh_privkey) {
|
||||||
|
wpabuf_free(sm->wps_ctx->dh_privkey);
|
||||||
|
}
|
||||||
os_free(sm->wps_ctx);
|
os_free(sm->wps_ctx);
|
||||||
sm->wps_ctx = NULL;
|
sm->wps_ctx = NULL;
|
||||||
}
|
}
|
||||||
@ -1733,6 +1740,9 @@ wifi_station_wps_deinit(void)
|
|||||||
sm->dev = NULL;
|
sm->dev = NULL;
|
||||||
}
|
}
|
||||||
if (sm->wps_ctx) {
|
if (sm->wps_ctx) {
|
||||||
|
if (sm->wps_ctx->dh_privkey) {
|
||||||
|
wpabuf_free(sm->wps_ctx->dh_privkey);
|
||||||
|
}
|
||||||
os_free(sm->wps_ctx);
|
os_free(sm->wps_ctx);
|
||||||
sm->wps_ctx = NULL;
|
sm->wps_ctx = NULL;
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
#include "os.h"
|
#include "os.h"
|
||||||
#include "esp_bit_defs.h"
|
#include "esp_bit_defs.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define SSID_MAX_LEN 32
|
||||||
|
|
||||||
/* Define platform specific variable type macros */
|
/* Define platform specific variable type macros */
|
||||||
#if defined(ESP_PLATFORM)
|
#if defined(ESP_PLATFORM)
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
@ -67,7 +70,6 @@ static inline unsigned int wpa_swap_32(unsigned int v)
|
|||||||
|
|
||||||
#endif /* __CYGWIN__ || CONFIG_NATIVE_WINDOWS */
|
#endif /* __CYGWIN__ || CONFIG_NATIVE_WINDOWS */
|
||||||
|
|
||||||
|
|
||||||
#ifndef WPA_BYTE_SWAP_DEFINED
|
#ifndef WPA_BYTE_SWAP_DEFINED
|
||||||
|
|
||||||
#ifndef __BYTE_ORDER
|
#ifndef __BYTE_ORDER
|
||||||
|
Loading…
Reference in New Issue
Block a user