Closed
Description
Basic Infos
- This issue complies with the issue POLICY doc.
- I have read the documentation at readthedocs and the issue is not addressed there.
- I have tested that the issue is present in current master branch (aka latest git).
- I have searched the issue tracker for a similar issue.
- If there is a stack dump, I have decoded it.
- I have filled out all fields below.
Platform
- Hardware: ESP-01
- Core Version: 3.0.0
- Development Env: Arduino IDE
- Operating System: Windows
Settings in IDE
- Module: Generic ESP8266 Module
- Flash Mode: dio
- Flash Size: 1M
- lwip Variant: v2 Lower Memory
- Reset Method: ck
- Flash Frequency: 40Mhz
- CPU Frequency: 80Mhz
- Upload Using: SERIAL
- Upload Speed: 115200
Problem Description
Immediately after connecting to a WPA2 Enterprise encrypted network I receive an exception. This seems to be related to the way free is called from a function in eap.c (which seems to be part of the SDK). I am not sure if this is a bug here or in the SDK, but apparently an address that is unmapped was passed to free. I am not sure if maybe the stack got corrupted somewhere as that function hierarchy doesn't really make sense to me.....
I have everything working on the super old version 2.3.0 (which uses completely different functions for setting WPA Enterprise up) but I want to update.
I have reproduced this on all Espressif Firmware Versions that are available.
MCVE Sketch
void setup() {
Serial.begin(115200);
Serial.println("Startup!");
Serial.print("Heap Free: ");
Serial.println(system_get_free_heap_size());
enableWiFiAtBootTime();
wifi_set_opmode_current(STATION_MODE);
struct station_config wifi_config;
memset(&wifi_config, 0, sizeof(wifi_config));
strcpy((char*)wifi_config.ssid, ssid);
wifi_station_set_config_current(&wifi_config);
wifi_station_set_wpa2_enterprise_auth(1);
wifi_station_set_enterprise_identity((uint8_t*)identity, strlen(identity));
wifi_station_set_enterprise_cert_key(esp_cert_pem, esp_cert_pem_len, esp_key_pem, esp_key_pem_len, NULL, 1);
wifi_station_disconnect();
wifi_station_connect();
Serial.println(F("Waiting for connection..."));
while (WiFi.status() != WL_CONNECTED) {
if (millis() > 60000) {
Serial.println(F("Took wayyy to long. Restarting..."));
ESP.restart();
}
delay(1000);
}
}
void loop() {
Serial.println("Connected!");
}
Debug Messages
No poison after block at: 0x406e4a2f, actual data: 0x0 0x0 0x80 0x0
User exception (panic/abort/assert)
--------------- CUT HERE FOR EXCEPTION DECODER ---------------
Error
:?:::0x4024b080:etharp_output
:?:::0x40201a52:raise_exception
:?:::0x40201aaf:__panic_func
0x40100e54 get_unpoisoned_check_neighbors
0x401012f2 umm_free
:\packages\esp8266\hardware\esp8266\3.0.0\cores\esp8266\umm_malloc/umm_malloc.cpp:574
0x4010130d umm_poison_free_fl
:?:::0x4024c4e0:etharp_output
:?:::0x40229979:wpa_set_bss
0x40100827 HeapSelectDram
:\packages\esp8266\hardware\esp8266\3.0.0\cores\esp8266/heap.cpp:370
:?:::0x4022aac7:wpabuf_free
:?:::0x4022bb92:wpa2_sm_rx_eapol
:?:::0x4022bba6:wpa2_sm_rx_eapol
:?:::0x4022bbe1:wpa2_sm_rx_eapol
:?:::0x4022b7ac:wpa2_sm_rx_eapol
:?:::0x40223129:sta_input
:?:::0x40240ccf:pp_tx_idle_timeout
:?:::0x4024058f:ppPeocessRxPktHdr
: ?? ??:0
: ?? ??:0
:?:::0x40105b88:call_user_start_local
:?:::0x40105b8e:call_user_start_local
:?:::0x4010000d:call_user_start
0x40235458 cont_ret
0x40235411 cont_continue