diff --git a/README.md b/README.md index 6b085aa5c9..f333e8623c 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Arduino core for ESP8266 WiFi chip # Quick links -- [Latest release documentation](https://arduino-esp8266.readthedocs.io/en/2.7.1/) +- [Latest release documentation](https://arduino-esp8266.readthedocs.io/en/2.7.3/) - [Current "git version" documentation](https://arduino-esp8266.readthedocs.io/en/latest/) - [Install git version](https://arduino-esp8266.readthedocs.io/en/latest/installing.html#using-git-version) ([sources](doc/installing.rst#using-git-version)) @@ -36,7 +36,7 @@ Starting with 1.6.4, Arduino allows installation of third-party platform package #### Latest release [![Latest release](https://img.shields.io/github/release/esp8266/Arduino.svg)](https://github.com/esp8266/Arduino/releases/latest/) Boards manager link: `https://arduino.esp8266.com/stable/package_esp8266com_index.json` -Documentation: [https://arduino-esp8266.readthedocs.io/en/2.7.1/](https://arduino-esp8266.readthedocs.io/en/2.7.1/) +Documentation: [https://arduino-esp8266.readthedocs.io/en/2.7.3/](https://arduino-esp8266.readthedocs.io/en/2.7.3/) ### Using git version [![Linux build status](https://travis-ci.org/esp8266/Arduino.svg)](https://travis-ci.org/esp8266/Arduino) diff --git a/boards.txt b/boards.txt index 3d2c355c29..8279cd5c53 100644 --- a/boards.txt +++ b/boards.txt @@ -5458,9 +5458,76 @@ gen4iod.menu.ssl.all.build.sslflags= gen4iod.menu.ssl.basic=Basic SSL ciphers (lower ROM use) gen4iod.menu.ssl.basic.build.sslflags=-DBEARSSL_SSL_BASIC gen4iod.upload.resetmethod=--before default_reset --after hard_reset -gen4iod.build.flash_mode=dio -gen4iod.build.flash_flags=-DFLASHMODE_DIO +gen4iod.menu.FlashMode.dout=DOUT (compatible) +gen4iod.menu.FlashMode.dout.build.flash_mode=dout +gen4iod.menu.FlashMode.dout.build.flash_flags=-DFLASHMODE_DOUT +gen4iod.menu.FlashMode.dio=DIO +gen4iod.menu.FlashMode.dio.build.flash_mode=dio +gen4iod.menu.FlashMode.dio.build.flash_flags=-DFLASHMODE_DIO +gen4iod.menu.FlashMode.qout=QOUT +gen4iod.menu.FlashMode.qout.build.flash_mode=qout +gen4iod.menu.FlashMode.qout.build.flash_flags=-DFLASHMODE_QOUT +gen4iod.menu.FlashMode.qio=QIO (fast) +gen4iod.menu.FlashMode.qio.build.flash_mode=qio +gen4iod.menu.FlashMode.qio.build.flash_flags=-DFLASHMODE_QIO gen4iod.build.flash_freq=80 +gen4iod.menu.eesz.2M64=2MB (FS:64KB OTA:~992KB) +gen4iod.menu.eesz.2M64.build.flash_size=2M +gen4iod.menu.eesz.2M64.build.flash_size_bytes=0x200000 +gen4iod.menu.eesz.2M64.build.flash_ld=eagle.flash.2m64.ld +gen4iod.menu.eesz.2M64.build.spiffs_pagesize=256 +gen4iod.menu.eesz.2M64.upload.maximum_size=1044464 +gen4iod.menu.eesz.2M64.build.rfcal_addr=0x1FC000 +gen4iod.menu.eesz.2M64.build.spiffs_start=0x1F0000 +gen4iod.menu.eesz.2M64.build.spiffs_end=0x1FB000 +gen4iod.menu.eesz.2M64.build.spiffs_blocksize=4096 +gen4iod.menu.eesz.2M128=2MB (FS:128KB OTA:~960KB) +gen4iod.menu.eesz.2M128.build.flash_size=2M +gen4iod.menu.eesz.2M128.build.flash_size_bytes=0x200000 +gen4iod.menu.eesz.2M128.build.flash_ld=eagle.flash.2m128.ld +gen4iod.menu.eesz.2M128.build.spiffs_pagesize=256 +gen4iod.menu.eesz.2M128.upload.maximum_size=1044464 +gen4iod.menu.eesz.2M128.build.rfcal_addr=0x1FC000 +gen4iod.menu.eesz.2M128.build.spiffs_start=0x1E0000 +gen4iod.menu.eesz.2M128.build.spiffs_end=0x1FB000 +gen4iod.menu.eesz.2M128.build.spiffs_blocksize=4096 +gen4iod.menu.eesz.2M256=2MB (FS:256KB OTA:~896KB) +gen4iod.menu.eesz.2M256.build.flash_size=2M +gen4iod.menu.eesz.2M256.build.flash_size_bytes=0x200000 +gen4iod.menu.eesz.2M256.build.flash_ld=eagle.flash.2m256.ld +gen4iod.menu.eesz.2M256.build.spiffs_pagesize=256 +gen4iod.menu.eesz.2M256.upload.maximum_size=1044464 +gen4iod.menu.eesz.2M256.build.rfcal_addr=0x1FC000 +gen4iod.menu.eesz.2M256.build.spiffs_start=0x1C0000 +gen4iod.menu.eesz.2M256.build.spiffs_end=0x1FB000 +gen4iod.menu.eesz.2M256.build.spiffs_blocksize=4096 +gen4iod.menu.eesz.2M512=2MB (FS:512KB OTA:~768KB) +gen4iod.menu.eesz.2M512.build.flash_size=2M +gen4iod.menu.eesz.2M512.build.flash_size_bytes=0x200000 +gen4iod.menu.eesz.2M512.build.flash_ld=eagle.flash.2m512.ld +gen4iod.menu.eesz.2M512.build.spiffs_pagesize=256 +gen4iod.menu.eesz.2M512.upload.maximum_size=1044464 +gen4iod.menu.eesz.2M512.build.rfcal_addr=0x1FC000 +gen4iod.menu.eesz.2M512.build.spiffs_start=0x180000 +gen4iod.menu.eesz.2M512.build.spiffs_end=0x1FA000 +gen4iod.menu.eesz.2M512.build.spiffs_blocksize=8192 +gen4iod.menu.eesz.2M1M=2MB (FS:1MB OTA:~512KB) +gen4iod.menu.eesz.2M1M.build.flash_size=2M +gen4iod.menu.eesz.2M1M.build.flash_size_bytes=0x200000 +gen4iod.menu.eesz.2M1M.build.flash_ld=eagle.flash.2m1m.ld +gen4iod.menu.eesz.2M1M.build.spiffs_pagesize=256 +gen4iod.menu.eesz.2M1M.upload.maximum_size=1044464 +gen4iod.menu.eesz.2M1M.build.rfcal_addr=0x1FC000 +gen4iod.menu.eesz.2M1M.build.spiffs_start=0x100000 +gen4iod.menu.eesz.2M1M.build.spiffs_end=0x1FA000 +gen4iod.menu.eesz.2M1M.build.spiffs_blocksize=8192 +gen4iod.menu.eesz.2M=2MB (FS:none OTA:~1019KB) +gen4iod.menu.eesz.2M.build.flash_size=2M +gen4iod.menu.eesz.2M.build.flash_size_bytes=0x200000 +gen4iod.menu.eesz.2M.build.flash_ld=eagle.flash.2m.ld +gen4iod.menu.eesz.2M.build.spiffs_pagesize=256 +gen4iod.menu.eesz.2M.upload.maximum_size=1044464 +gen4iod.menu.eesz.2M.build.rfcal_addr=0x1FC000 gen4iod.menu.eesz.512K32=512KB (FS:32KB OTA:~230KB) gen4iod.menu.eesz.512K32.build.flash_size=512K gen4iod.menu.eesz.512K32.build.flash_size_bytes=0x80000 diff --git a/bootloaders/eboot/eboot.c b/bootloaders/eboot/eboot.c index be67b0b6fe..0a38a88416 100644 --- a/bootloaders/eboot/eboot.c +++ b/bootloaders/eboot/eboot.c @@ -230,6 +230,7 @@ int main() ets_putc('0'+res); ets_putc('\n'); +/** disabled in 2.7.3 // Verify the copy ets_putc('c'); ets_putc('m'); ets_putc('p'); ets_putc(':'); if (res == 0) { @@ -237,8 +238,9 @@ int main() res = copy_raw(cmd.args[0], cmd.args[1], cmd.args[2], true); ets_wdt_enable(); } - ets_putc('0'+res); ets_putc('\n'); +**/ + if (res == 0) { cmd.action = ACTION_LOAD_APP; cmd.args[0] = cmd.args[1]; diff --git a/bootloaders/eboot/eboot.elf b/bootloaders/eboot/eboot.elf index 60329d847e..c6e56d7d14 100755 Binary files a/bootloaders/eboot/eboot.elf and b/bootloaders/eboot/eboot.elf differ diff --git a/cores/esp8266/Updater.cpp b/cores/esp8266/Updater.cpp index 351a57746b..03bc5c3f8f 100644 --- a/cores/esp8266/Updater.cpp +++ b/cores/esp8266/Updater.cpp @@ -35,6 +35,7 @@ UpdaterClass::UpdaterClass() , _startAddress(0) , _currentAddress(0) , _command(U_FLASH) +, _ledPin(-1) , _hash(nullptr) , _verify(nullptr) , _progress_callback(nullptr) diff --git a/cores/esp8266/heap.cpp b/cores/esp8266/heap.cpp index 2001579ef0..3f549716f4 100644 --- a/cores/esp8266/heap.cpp +++ b/cores/esp8266/heap.cpp @@ -164,7 +164,7 @@ void ICACHE_RAM_ATTR print_loc(size_t size, const char* file, int line) if (inISR && (uint32_t)file >= 0x40200000) { DEBUG_HEAP_PRINTF("File: %p", file); } else if (!inISR && (uint32_t)file >= 0x40200000) { - char buf[ets_strlen(file)] __attribute__ ((aligned(4))); + char buf[ets_strlen(file) + 1] __attribute__((aligned(4))); ets_strcpy(buf, file); DEBUG_HEAP_PRINTF(buf); } else { diff --git a/cores/esp8266/umm_malloc/umm_local.c b/cores/esp8266/umm_malloc/umm_local.c index 8f83f4b4ac..392ef13c8f 100644 --- a/cores/esp8266/umm_malloc/umm_local.c +++ b/cores/esp8266/umm_malloc/umm_local.c @@ -206,7 +206,7 @@ int ICACHE_FLASH_ATTR umm_info_safe_printf_P(const char *fmt, ...) { the PROGMEM address must be word (4 bytes) aligned. The destination address for ets_memcpy must also be word-aligned. */ - char ram_buf[ets_strlen(fmt)] __attribute__ ((aligned(4))); + char ram_buf[ets_strlen(fmt) + 1] __attribute__((aligned(4))); ets_strcpy(ram_buf, fmt); va_list argPtr; va_start(argPtr, fmt); diff --git a/doc/boards.rst b/doc/boards.rst index 7ab98e2513..9c94b63120 100644 --- a/doc/boards.rst +++ b/doc/boards.rst @@ -413,7 +413,7 @@ Datasheet and associated downloads can be found on the 4D Systems product page. The gen4-IoD range can be programmed using the Arduino IDE and also the 4D Systems Workshop4 IDE, which incorporates many additional graphics benefits. GFX4d library is available, along with a number of demo applications. -- Product page: http://www.4dsystems.com.au/product/gen4-IoD +- Product page: https://4dsystems.com.au/products/iot-display-modules Digistump Oak ------------- diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp index 41d771fb6a..2a5f96cb5d 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp @@ -233,6 +233,16 @@ void ESP8266WiFiGenericClass::_eventCallback(void* arg) WiFiClient::stopAll(); } + if (event->event == EVENT_STAMODE_AUTHMODE_CHANGE) { + auto& src = event->event_info.auth_change; + if ((src.old_mode != AUTH_OPEN) && (src.new_mode == AUTH_OPEN)) { + // CVE-2020-12638 workaround. When we get a change to AUTH_OPEN from any other mode, drop the WiFi link because it's a downgrade attack + // TODO - When upgrading to 3.x.x with fix, remove this code + DEBUG_WIFI("WIFI_EVENT_STAMODE_AUTHMODE_CHANGE from encrypted(%d) to AUTH_OPEN, potential downgrade attack. Reconnecting WiFi. See CVE-2020-12638 for more details\n", src.old_mode); + WiFi.reconnect(); // Disconnects from STA and then reconnects + } + } + for(auto it = std::begin(sCbEventList); it != std::end(sCbEventList); ) { WiFiEventHandler &handler = *it; if (handler->canExpire() && handler.unique()) { diff --git a/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp index 773f68cfdc..89621b3671 100644 --- a/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp @@ -96,11 +96,8 @@ void WiFiClientSecure::_clearAuthenticationSettings() { _use_fingerprint = false; _use_self_signed = false; _knownkey = nullptr; - _sk = nullptr; _ta = nullptr; _axtls_ta = nullptr; - _axtls_chain = nullptr; - _axtls_sk = nullptr; } diff --git a/libraries/LittleFS/src/LittleFS.cpp b/libraries/LittleFS/src/LittleFS.cpp index b85075112e..7fd4351fcb 100644 --- a/libraries/LittleFS/src/LittleFS.cpp +++ b/libraries/LittleFS/src/LittleFS.cpp @@ -87,6 +87,7 @@ FileImplPtr LittleFSImpl::open(const char* path, OpenMode openMode, AccessMode a // a directory whose name we are carrying around but which cannot be read or written return std::make_shared(this, path, nullptr, flags, creation); } else if (rc == 0) { + lfs_file_sync(&_lfs, fd.get()); return std::make_shared(this, path, fd, flags, creation); } else { DEBUGV("LittleFSDirImpl::openFile: rc=%d fd=%p path=`%s` openMode=%d accessMode=%d err=%d\n", diff --git a/package.json b/package.json index 5629afd636..235db02b9c 100644 --- a/package.json +++ b/package.json @@ -2,5 +2,5 @@ "name": "framework-arduinoespressif8266", "description": "Arduino Wiring-based Framework (ESP8266 Core)", "url": "https://github.com/esp8266/Arduino", - "version": "2.7.2" + "version": "2.7.3" } diff --git a/platform.txt b/platform.txt index 26d83fa654..2f0e8cb14a 100644 --- a/platform.txt +++ b/platform.txt @@ -5,8 +5,8 @@ # For more info: # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification -name=ESP8266 Boards (2.7.2) -version=2.7.2 +name=ESP8266 Boards (2.7.3) +version=2.7.3 # These will be removed by the packager script when doing a JSON release runtime.tools.xtensa-lx106-elf-gcc.path={runtime.platform.path}/tools/xtensa-lx106-elf diff --git a/tests/host/fs/test_fs.inc b/tests/host/fs/test_fs.inc index 0a2cc423fc..683f3a99ba 100644 --- a/tests/host/fs/test_fs.inc +++ b/tests/host/fs/test_fs.inc @@ -198,6 +198,28 @@ TEST_CASE(TESTPRE "seek() pase EOF returns error (#7323)", TESTPAT) f.close(); } +TEST_CASE(TESTPRE "Rewriting file frees space immediately (#7426)", TESTPAT) +{ + FS_MOCK_DECLARE(64, 8, 512, ""); + REQUIRE(FSTYPE.begin()); + FSInfo inf; + FSTYPE.info(inf); + // Calculate the size to write per-FS, due to differing overheads + int kbToWrite = (inf.totalBytes - inf.usedBytes - 8192) / 1024; + // Create and overwrite a file >50% of spaceA (48/64K) + for (auto x = 0; x < 2; x++) { + auto f = FSTYPE.open("/file1.bin", "w"); + REQUIRE(f); + uint8_t buff[1024]; + memset(buff, 0xaa, 1024); + for (auto i = 0; i < kbToWrite; i++) { + REQUIRE(f.write(buff, 1024)); + } + f.close(); + FSTYPE.info(inf); + } +} + #ifdef FS_HAS_DIRS #if FSTYPE != SDFS diff --git a/tools/boards.txt.py b/tools/boards.txt.py index 8263191495..30f2a9bbe5 100755 --- a/tools/boards.txt.py +++ b/tools/boards.txt.py @@ -759,8 +759,9 @@ }, 'macro': [ 'resetmethod_nodemcu', - 'flashmode_dio', + 'flashmode_menu', 'flashfreq_80', + '2M', '512K', ], 'desc': [ 'gen4-IoD Range of ESP8266 powered Display Modules by 4D Systems.', @@ -771,7 +772,7 @@ '', 'The gen4-IoD range can be programmed using the Arduino IDE and also the 4D Systems Workshop4 IDE, which incorporates many additional graphics benefits. GFX4d library is available, along with a number of demo applications.', '', - '- Product page: http://www.4dsystems.com.au/product/gen4-IoD', + '- Product page: https://4dsystems.com.au/products/iot-display-modules', ], }), ( 'oak', {