Commit Graph
100 Commits
Author SHA1 Message Date
Konstantin Kondrashov 62aa8a8393 fix(bootloader): use correct format specifier for MMU_LL_END_DROM_ENTRY_VADDR
MMU_LL_END_DROM_ENTRY_VADDR is an int-typed constant on several targets,
so logging it with PRIx32 (uint32_t) triggered -Werror=format=. Use the
plain %x specifier which matches the int type.

Closes https://github.com/espressif/esp-idf/issues/18857
2026-07-22 09:32:51 +03:00
Konstantin Kondrashov 58caaebbf5 fix(esp_event): free queued legacy cleanup ctx on loop delete
When a loop is deleted while an internal legacy "cleanup" event is still
queued (posted by a deferred self-unregistration from within a handler),
esp_event_loop_delete() drained the queue but only freed the post payload,
leaking the heap copy of the handler context allocated for the legacy path.

Free ctx->handler_ctx for queued legacy cleanup events while draining the
queue, mirroring the cleanup done in esp_event_loop_run().

Add a regression test that leaves a legacy cleanup event queued and asserts
no memory is leaked on loop deletion.
2026-07-21 17:15:20 +03:00
Konstantin Kondrashov 0a66277300 fix(esp_event): clear running_task before releasing mutex on tick timeout
When esp_event_loop_run() exited via the ticks-expired break path,
loop->running_task was left pointing to the current task handle.
Any subsequent trylock in esp_event_handler_unregister_with_internal()
would see a stale non-NULL running_task and take the wrong code path.
2026-07-21 17:15:20 +03:00
Konstantin Kondrashov 90bfe49549 fix(esp_event): prevent UAF race between post and loop delete (SEC-222)
esp_event_post_to() could access loop->queue / loop->mutex after
esp_event_loop_delete() freed them when both ran concurrently.

Introduce esp_event_loop_state_t with:
- posts_in_flight: reference-count incremented atomically (under
  state.lock spinlock) before touching any loop resources, decremented
  on every exit path via goto on_err.
- deleting: atomic_bool set by esp_event_loop_delete() to block new
  posts from entering the critical section.

esp_event_loop_delete() sets deleting=true, then busy-waits (releasing
and re-acquiring loop->mutex each tick) until posts_in_flight reaches
zero before proceeding with teardown.

esp_event_isr_post_to() performs a lock-free atomic_load of deleting as
a best-effort guard; ISR context cannot participate in the spinlock
protocol but the window is documented and accepted.
2026-07-21 17:15:19 +03:00
Konstantin Kondrashov c0fc78ca26 fix(esp_event): skip dispatch for internal cleanup events (SEC-221)
After processing an esp_event_handler_cleanup sentinel, execution fell
through into the regular dispatch block. Every loop-level (ANY_BASE/
ANY_ID) handler was invoked with base="cleanup" and event_data pointing
at the internal esp_event_remove_handler_context_t struct.

Consequences:
- Information disclosure: internal handler addresses and loop instance
  pointer are exposed to every loop-level handler.
- UAF: if a handler stores event_data for later use, post_instance_delete
  frees the ctx, turning the stored pointer into a dangling reference.
- Logic corruption: handlers that switch on base with a default branch
  misbehave on every unregister anywhere in the system.

Fix: wrap the regular dispatch block in an else clause so it is skipped
entirely for cleanup events. post_instance_delete, ticks accounting, and
xSemaphoreGiveRecursive remain in the shared tail executed for both paths.

Closes SEC_221
2026-07-21 16:51:40 +03:00
Konstantin Kondrashov 086faab0c5 fix(esp_event): use recursive mutex API in handler unregister (SEC-220)
1) loop->mutex is created with xSemaphoreCreateRecursiveMutex(). FreeRTOS
requires that recursive mutexes are only acquired and released with
xSemaphoreTakeRecursive / xSemaphoreGiveRecursive.

esp_event_handler_unregister_with_internal() used the non-recursive
xSemaphoreTake(loop->mutex, 0) / xSemaphoreGive(loop->mutex) in the fast
path. The non-recursive Take bypasses uxRecursiveCallCount bookkeeping;
if the same task subsequently takes the mutex recursively (e.g. re-entry
from a handler or a follow-up register), the call count drifts. The
non-recursive Give then unconditionally drops the holder, allowing another
task to acquire the mutex while the original task still believes it holds
the lock — a full lock violation on the handler list leading to UAF and
potential RCE on attacker-driven event floods.

Fix: replace xSemaphoreTake/xSemaphoreGive with the Recursive variants in
the fast (try-take with timeout 0) path of unregister_with_internal.

2) avoid use-after-free when unregistering handler from a callback

The recursive try-lock introduced in SEC-220 succeeds re-entrantly when a
handler unregisters itself from within its own callback, causing the handler
node to be freed immediately while the dispatch loop still writes profiling
counters to it after the callback returns. Route the in-callback case to the
deferred cleanup path and only free directly once no dispatch is active.

Closes SEC_220
2026-07-21 16:51:40 +03:00
Konstantin Kondrashov a2d865b4c8 fix(esp_event): protect is_handler_registered traversal with mutex (SEC-219)
esp_event_is_handler_registered() walked loop_nodes, base_nodes, id_nodes
and handler lists with no lock held, then released an unowned mutex at the
'out:' label via xSemaphoreGive().

Concurrent register/unregister/delete operations can free handler nodes
during the unlocked walk (SLIST UAF). The xSemaphoreGive on an unowned
recursive mutex corrupts the recursive call-count of any task that
legitimately holds the mutex.

Fix:
- Take loop->mutex with xSemaphoreTakeRecursive before the traversal.
- Replace xSemaphoreGive at the 'out:' label with xSemaphoreGiveRecursive
  so every exit path holds the mutex for exactly one balanced take/give.

Closes SEC_219
2026-07-21 16:51:39 +03:00
Konstantin Kondrashov 2fec4e6930 fix(esp_event): fix format string vulnerability in esp_event_dump (SEC-064)
fprintf(file, buf) is a format-string sink: if any registered event base
or handler name contains "%", fprintf interprets it as a format directive,
causing an information leak or crash.

Replace with fprintf(file, "%s", buf) so the buffer is always treated as
plain text regardless of its content.

Closes SEC_064
2026-07-21 16:51:39 +03:00
Konstantin Kondrashov 666dc3b438 fix(bootloader): increase partition table offset for ESP32-P4 in affected test configs 2026-07-21 13:35:35 +03:00
Konstantin Kondrashov decd12a726 fix(esp_image_format): validate MMU page size 2026-07-21 13:35:35 +03:00
Konstantin Kondrashov 747facfa27 fix(esp_image_format): verify length of segment #0 for app description 2026-07-21 13:35:35 +03:00
Konstantin Kondrashov e8c1dad0c1 fix(esp_image_format): Verify image segment count 2026-07-21 13:35:35 +03:00
Konstantin Kondrashov 6b95e00788 feat(ipc_isr): adds IPC ISR safe API for other CPU stall API 2026-07-20 11:20:23 +03:00
Konstantin Kondrashov 79af60b4ef fix(docs): Update bootloader anti-rollback documentation 2026-07-16 13:39:50 +03:00
Konstantin Kondrashov d5869bb6ee fix(bootloader): Hide bootloader anti-rollback Kconfig where not supported 2026-07-16 09:38:04 +03:00
Konstantin Kondrashov 255478ce73 fix(bootloader): handle extra component dirs in v1 subproject
Closes https://github.com/espressif/esp-idf/issues/18651
2026-06-16 12:20:48 +03:00
Konstantin Kondrashov 555e5bf271 fix(bootloader_hooks): Fix log_v2 support in bootloader hooks
Closes https://github.com/espressif/esp-idf/issues/18482
2026-05-14 14:09:31 +03:00
Konstantin Kondrashov 9e03819d91 feat(efuse): Update efuse table for ESP32-H4 2026-05-14 14:42:49 +08:00
Konstantin Kondrashov 2fcf83e2f3 fix(test_apps): Increase CONFIG_PARTITION_TABLE_OFFSET to 0x9000
Fix some test apps that have a partition table offset of 0x8000,
which left no room for the bootloader for some chips.
2026-05-13 10:18:40 +03:00
Konstantin Kondrashov a742bd519a feat(bootloader): Support recovery bootloader for ESP32P4/C61 2026-05-13 10:18:15 +03:00
Konstantin Kondrashov b332db39a5 fix(console): Avoid REPL task busy loop when linenoise returns NULL
When the REPL input backend is unavailable, linenoise() may return NULL
immediately. esp_console_repl_task() currently retries without yielding,
which can make the console_repl task spin continuously.

For USB Serial/JTAG console this can happen when the REPL is started
without an attached USB host. Since the REPL task has priority 2, this
can starve lower-priority tasks, prevent app_main from continuing after
esp_console_start_repl(), and trigger the task watchdog due to IDLE not
running.

Add a small delay before retrying when linenoise() returns NULL.

Closes https://github.com/espressif/esp-idf/issues/18485
2026-05-11 13:05:26 +03:00
Konstantin Kondrashov e0a6cc9a23 feat(efuse): Adds efuse calibration field for esp32c5 2026-05-07 15:59:58 +03:00
Konstantin Kondrashov 12f88ef87a fix(esp32): Fix IRAM_AS_8BIT_ACCESSIBLE_MEMORY accessible from ISR1 2026-05-01 18:17:51 +03:00
Konstantin Kondrashov 855da651d3 feat(efuse): Adds efuse for ESP32-H2 revision 1.2 2026-05-01 12:15:33 +03:00
Konstantin Kondrashov e34be7afd5 feat(hal): Adds half-word read/write checks for efuse 2026-03-25 10:31:10 +08:00
Konstantin Kondrashov b789f667e0 fix(freertos): fix riscv pxEndOfStack offset alignment
Closes https://github.com/espressif/esp-idf/issues/18256
2026-03-24 09:40:28 +02:00
Konstantin Kondrashov 144c74a1fe revert(ulp): drop riscv timeout helper from backports 2026-03-20 16:44:14 +08:00
Konstantin Kondrashov bc2081ca1e revert(ulp): drop lp timeout helper from backports 2026-03-20 16:44:14 +08:00
Konstantin Kondrashov 6fe2cf575f feat(ulp): Improved ULP delay API accuracy and removed floating point operations
Closes https://github.com/espressif/esp-idf/issues/17494
Closes https://github.com/espressif/esp-idf/issues/16891
2026-03-20 16:44:14 +08:00
Konstantin Kondrashov d834791967 fix(esp32): Fix access to MALLOC_CAP_IRAM_8BIT byte array in loop
The Xtensa load/store handler did not properly handle 8/16-bit
memory access to IRAM regions configured with MALLOC_CAP_IRAM_8BIT
(and CONFIG_ESP32_IRAM_AS_8BIT_ACCESSIBLE_MEMORY=y) from a loop
(LBEG/LEND/LCOUNT) context. This caused the loop to exit after
the first access, instead of continuing to iterate as intended.

Closes https://github.com/espressif/esp-idf/issues/14127
2026-03-20 16:43:58 +08:00
Konstantin Kondrashov 3d2b3b059b feat(efuse): Adds efuse flash fields for esp32c2 2026-03-18 19:40:14 +08:00
Konstantin Kondrashov dd79d441b0 fix(esp_system): Fix flaky tests with memory leak in sleep test 2026-03-09 14:19:29 +02:00
Konstantin Kondrashov b6324856f5 fix(efuse): erase virtual blocks before burn in damaged-reading test
Some chip may have BLOCK3 in use so we need to erase it before test.
2026-03-09 13:30:36 +02:00
Konstantin Kondrashov 15ca8f7669 fix(app_update): Fix tests for app_update on ESP32C5 2026-01-28 16:59:15 +02:00
Konstantin Kondrashov ad93238bf1 fix(examples): Use another efuse block for custom efuse table on ESP32H2 2026-01-21 14:38:22 +02:00
Konstantin Kondrashov 84dec0fe39 fix(efuse): Fix test where size of field was obtained incorrectly
When the eFuse field consists of single descriptor, its size can be
taken from struct member 'bit_count'. However, when the field consists of
multiple descriptors, the size should be obtained via esp_efuse_get_field_size()
2025-11-25 13:35:51 +05:30
Konstantin Kondrashov ed6f89f90a fix(efuse): Adds missing SOC defines for ESP32-P4 v3 2025-11-25 13:35:51 +05:30
Konstantin Kondrashov ec85de2bec fix(examples): Fix IPC ISR RISC-V test for ESP32-P4 rev3
Remove checks for MSTATUS and MCAUSE values that
may vary in different chip revisions.
2025-11-25 13:35:50 +05:30
Konstantin Kondrashov 6f9e137336 feat(efuse): Adds calibration efuses for ESP32-P4 ECO5 2025-10-15 15:36:56 +03:00
Konstantin Kondrashov 969d017c56 feat(efuse): Support efuses for ESP32-P4 ECO5 2025-10-15 15:36:55 +03:00
Konstantin Kondrashov caf15b8f66 fix(esp_libc): Fix test_time UTs for newlib nano format
Optimized UTs for newlib nano format (where no support 64 bits print).
(C2 chip with CONFIG_LIBC_NEWLIB_NANO_FORMAT=y)
2025-10-08 12:00:34 +03:00
Konstantin Kondrashov be280d3431 fix(efuse): Fix enabling ROM secure download mode 2025-09-30 15:08:27 +08:00
Konstantin Kondrashov 0096599660 feat(build): Default warnings to be considered as errors 2025-09-26 10:15:46 +03:00
Konstantin Kondrashov 16d73cdab3 feat(log): Adds ESP_LOG_ATTR macro to control section placement 2025-09-15 15:59:52 +03:00
Konstantin Kondrashov dcf486359e feat(log): Optimize log tag init for bin logging 2025-09-15 15:59:52 +03:00
Konstantin Kondrashov 00e90bea33 feat(log): Optimization of log buffers for bin log mode 2025-09-15 15:40:46 +03:00
Konstantin Kondrashov 8e7ed24eb6 feat(log): Reserve first 4 bytes as zero for vars pointed to NULL
For bin log, reserve the first 4 bytes as zero for variables that are pointed to NULL
and should not be printed in the log. So the esp-idf-monitor will skip printing
those variables.
2025-09-15 15:40:45 +03:00
Konstantin Kondrashov 3ef17fe231 feat(esp_ringbuf): Fixes full no-split buffer frees item incorrectly
Closes https://github.com/espressif/esp-idf/issues/17466#issuecomment-3209730773
2025-08-27 14:02:20 +03:00
Konstantin Kondrashov 91a2744d44 fix(rt): Fixes Coverity false positive in va_list initialization 2025-08-26 22:13:50 +08:00
Konstantin Kondrashov 1ca82baec3 fix(heap): Fixes Coverity false positive in va_list initialization 2025-08-26 22:13:50 +08:00
Konstantin Kondrashov ca2ccf164c fix(log): Fixes Coverity false positive in va_list initialization 2025-08-26 22:13:50 +08:00
Konstantin Kondrashov 9b11b69a46 fix(console): Fixes Coverity false positive in va_list initialization 2025-08-26 22:13:50 +08:00
Konstantin Kondrashov 5c3d03cee4 fix(newlib): Fixes Coverity issues 2025-08-25 14:27:42 +03:00
Konstantin Kondrashov 6b8d4cc1fb remove(log): Remove deprecated functions and header file 2025-08-15 18:04:08 +08:00
Konstantin Kondrashov d834e4333a feat(docs): Update ESP32-C61 efuse documentation 2025-08-14 11:52:03 +03:00
Konstantin Kondrashov 2fdeaa882f feat(pthread): Adds timed locks for pthread_rwlock
Closes https://github.com/espressif/esp-idf/issues/16099
2025-08-13 20:22:27 +03:00
Konstantin Kondrashov 1113ef2ff0 feat(ipc): Allow IPC recursion calls in esp_ipc_call 2025-08-12 16:16:09 +03:00
Konstantin Kondrashov 9e07bb10a0 feat(efuse): Allow custom key purposes 2025-08-12 14:32:01 +08:00
Konstantin Kondrashov 4bf5d62683 fix(efuse): ESP32-H21 no issues on BLOCK9 with AES_XTS and ECDSA keys 2025-08-11 17:49:43 +05:30
Konstantin Kondrashov cd5b581425 fix(ulp_riscv): Fix a delay function to handle small delays correctly
Fixed ulp_riscv_delay_cycles function

Closes https://github.com/espressif/esp-idf/issues/16891
2025-08-06 15:57:03 +08:00
Konstantin Kondrashov ff0408c087 feat(esp_system): Adds Kconfigs to place code in IRAM 2025-06-23 13:23:33 +03:00
Konstantin Kondrashov 3a7c1a2e74 feat(bootloader): Bootloader OTA update with recovery bootloader feat 2025-06-12 18:47:33 +08:00
Konstantin Kondrashov 3b0f4e4083 feat(efuse): Adds 3-bit field for wafer major version in ESP32-P4 2025-06-11 16:35:03 +08:00
Konstantin Kondrashov 909fd09ffa feat(partition_table): Improves documentation for partition table 2025-05-22 16:09:08 +03:00
Konstantin Kondrashov 43e2abac14 feat(docs): Improve error handling documentation
Merges https://github.com/espressif/esp-idf/pull/15930
2025-05-20 11:11:07 +03:00
Konstantin Kondrashov 086555e0ed feat(efuse): Adds efuses for ESP32-C61 ECO3 2025-05-20 15:57:10 +08:00
Konstantin Kondrashov ec096b3823 fix(log): Fix bin log config available only for log version 2 2025-05-15 16:46:45 +03:00
Konstantin Kondrashov 179eb5a5aa refactor(partition_table): Refactoring of code style 2025-05-14 18:45:49 +03:00
Konstantin Kondrashov fc72712b10 fix(partition_table): Ignore UTF-8 BOM bytes in csv file 2025-05-14 18:45:49 +03:00
Konstantin Kondrashov 11321b585e fix(examples): Fix CI tests for secure boot cases 2025-05-13 19:20:22 +03:00
Konstantin Kondrashov f9b81e80ba fix(efuse): Fix ESP32-C5 eFuse test for ECO2 2025-05-12 14:33:41 +03:00
Konstantin Kondrashov 3a72305e50 feat(efuse): Support efuses for ESP32-C5 ECO2 2025-05-09 09:29:31 +03:00
Konstantin Kondrashov 81c08911f0 feat(unity): Adds unit test ordering by file path and line number
Closes https://github.com/espressif/esp-idf/issues/15529
2025-04-24 13:16:05 +03:00
Konstantin Kondrashov 204046e799 feat(log): Add binary logging support 2025-04-23 15:46:34 +08:00
Konstantin Kondrashov 33633a5024 fix(esp_common): Fix DRAM_DMA_ALIGNED_ATTR for P4 2025-04-22 18:02:16 +03:00
Konstantin Kondrashov 82276fc918 feat(docs): Adds ULP main documentation page 2025-04-21 13:20:54 +03:00
Konstantin Kondrashov 44983e6496 fix(ulp): Fix accumulation of wakeup cause bits in ULP
Closes https://github.com/espressif/esp-idf/issues/15794
2025-04-18 12:14:07 +03:00
Konstantin Kondrashov d889031504 feat(soc): Adds core_num definition for Linux target
Closes https://github.com/espressif/esp-idf/issues/15758
2025-04-15 18:54:33 +03:00
Konstantin Kondrashov 917adbb171 fix(efuse): Adds missing efuses fields for ESP32-H4 2025-03-12 17:19:50 +08:00
Konstantin Kondrashov 5417edbe24 fix(efuse): Fix Coverity warning for destroy_block func 2025-03-07 16:44:22 +08:00
Konstantin Kondrashov 038d99f3c5 feat(efuse): Generate efuse source files for ESP32-H4 2025-02-26 09:50:11 +02:00
Konstantin Kondrashov 8155e60edf feat(esp_ringbuf): Update ring buffer doc
Closes https://github.com/espressif/esp-idf/issues/15298
2025-02-06 17:44:14 +02:00
Konstantin Kondrashov dbfb2489b4 fix(docs): Fixes log doc after review 2025-01-08 14:46:53 +08:00
Konstantin Kondrashov b37218ce1a feat(docs): Updates the log doc adding log v2 2025-01-08 14:46:53 +08:00
Konstantin Kondrashov b994f33f51 feat(log): Updates timestamp APIs 2025-01-08 14:46:53 +08:00
Konstantin Kondrashov bc46512ad5 feat(log): Make the buffer log API available to bootloader 2025-01-08 14:46:53 +08:00
Konstantin Kondrashov a5bc08fb55 feat(log): Use esp_log func in all LOG macros 2025-01-08 14:46:53 +08:00
Konstantin Kondrashov 820a73f4cc feat(espefuse): Adds efuses for esp32h2 eco5
- Support efuses that are not present in the main efuse table
2024-12-30 15:56:48 +02:00
Konstantin Kondrashov 15870abd87 feat(app_update): Adds test for invalidating OTA data slot of last boot app 2024-12-21 13:08:00 +02:00
Konstantin Kondrashov c9ea30e6c0 fix(app_update): Invalidate ota data slot of last boot app in esp_ota_begin
Closes https://github.com/espressif/esp-idf/issues/14808
2024-12-20 14:55:48 +02:00
Konstantin Kondrashov ad38ba16dd fix(bootloader_support): Fix overflowed constant in process_segment 2024-12-05 15:10:27 +08:00
Konstantin Kondrashov 5a245a389b fix(bootloader_support): Fix overflowed constant in bootloader_sha256_flash_contents 2024-12-05 15:10:27 +08:00
Konstantin Kondrashov 9d41a098d7 fix(esp_system): Fix structurally dead code in esp_ipc.c ipc_task 2024-12-05 15:10:27 +08:00
Konstantin Kondrashov d9265a3f88 feat(log): Update esp_log_buffer 2024-12-03 18:03:06 +08:00
Konstantin Kondrashov 9f2b892512 feat(log): Move LOG_FORMAT macros out of esp_log.h 2024-12-03 18:03:06 +08:00
Konstantin Kondrashov fa3b26bbc3 feat(log): Use ESP_LOG_LEVEL_LEN in cache tag_log_level 2024-12-03 18:03:06 +08:00
Konstantin Kondrashov 21f7309a52 feat(esp_rom): Adds esp_rom_cvt func for logging and rom_vprintf 2024-12-03 18:03:06 +08:00
Konstantin Kondrashov b445e38bf5 feat(log): Move esp_log_write APIs out of esp_log.h 2024-12-03 18:03:06 +08:00
Konstantin Kondrashov 864d9ed46c fix(spi_flash): Fix Test esp_flash_write 2024-11-25 17:12:25 +02:00
Konstantin Kondrashov 724ed52209 fix(examples): Fix closing port in pytest_otatool 2024-11-22 07:32:25 +02:00