Commit Graph
100 Commits
Author SHA1 Message Date
Konstantin Kondrashov 82e6c831e7 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 15:33:47 +03:00
Konstantin Kondrashov e8ffb477a0 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 15:25:58 +03:00
Konstantin Kondrashov 9d2d32524b 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 15:25:58 +03:00
Konstantin Kondrashov 736275e562 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 15:25:57 +03:00
Konstantin Kondrashov 4ab4d5b894 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 15:25:57 +03:00
Konstantin Kondrashov 2c935ea861 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 15:25:57 +03:00
Konstantin Kondrashov 46fceb2490 fix(heap): trace heap_caps_calloc allocations in standalone heap tracing
heap_caps_calloc_base() calls heap_caps_malloc_base() from the same
translation unit (heap_caps_base.c). GNU ld --wrap only redirects
undefined references, so that intra-object call binds to the real
heap_caps_malloc_base and never enters __wrap_heap_caps_malloc_base.
As a result, allocations made through heap_caps_calloc() were never
recorded by heap tracing, silently hiding potentially large INTERNAL
leaks (e.g. mbedtls SSL buffers via MALLOC_CAP_INTERNAL).

Add heap_caps_calloc_base to the --wrap list and implement
__wrap_heap_caps_calloc_base, which records the allocation via a
noinline trace_calloc helper (mirroring trace_malloc so the recorded
call stack depth stays consistent) and calls __real_heap_caps_calloc_base.
The inner malloc_base call remains same-TU and unwrapped, so each
calloc produces exactly one trace record (no double counting).
2026-07-20 19:17:12 +03:00
Konstantin Kondrashov e4a2cf57e5 fix(log): use unsigned format specifier for esp_log_system_timestamp msec
Use the unsigned format specifier to match the millisecond value type.

This avoids format warnings under stricter compiler diagnostics.
2026-07-20 17:14:18 +03:00
Konstantin Kondrashov 05b65a5b0e fix(docs): Update bootloader anti-rollback documentation 2026-07-15 17:43:55 +03:00
Konstantin Kondrashov 8913d4cf61 fix(esp_bootloader_format): Remove bootloader description from app build
The removed function `esp_bootloader_get_description` never worked in the app build.
It can be used only in the bootloader build.

To read the bootloader description from app, there is another function
`esp_ota_get_bootloader_description`.
2026-07-10 12:17:59 +03:00
Konstantin Kondrashov bc1b1a7f70 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-06 15:05:53 +03:00
Konstantin Kondrashov d65c091ad8 fix(bootloader): Hide bootloader anti-rollback Kconfig where not supported 2026-07-06 13:58:39 +03:00
Konstantin Kondrashov e08d198fd6 fix(esp_image_format): validate MMU page size 2026-06-29 12:10:50 +03:00
Konstantin Kondrashov d06a91db18 fix(esp_image_format): verify length of segment #0 for app description 2026-06-23 15:22:03 +03:00
Konstantin Kondrashov d03f628da6 fix(esp_image_format): Verify image segment count 2026-06-23 14:57:05 +03:00
Konstantin Kondrashov dcd9dbc0dc fix(bootloader): handle extra component dirs in v1 subproject
Closes https://github.com/espressif/esp-idf/issues/18651
2026-06-15 10:13:09 +03:00
Konstantin Kondrashov f6f24af00a feat(esp_timer): Adds support Linux target 2026-06-11 11:59:25 +03:00
Konstantin Kondrashov 885097762f feat(efuse): Support efuse token dump
- efuse token dump is compatible with espefuse tool
- EFSW dump can be burned on chip with esp_efuse_token_burn()
2026-06-03 13:19:59 +03:00
Konstantin Kondrashov 672736304c feat(ipc_isr): adds IPC ISR safe API for other CPU stall API 2026-06-02 13:57:47 +03:00
Konstantin Kondrashov f870ed9d61 feat(efuse): Update efuse table for ESP32H21 2026-05-21 16:29:09 +03:00
Konstantin Kondrashov 1ced5355fd feat(docs): Update efuse doc for H21 2026-05-19 15:38:19 +03:00
Konstantin Kondrashov b0da67ab1d feat(docs): Update efuse doc for H4 2026-05-19 15:17:50 +03:00
Konstantin Kondrashov b853ad7091 fix(pmu_sleep): Wait eFuse memory update after sleep for ESP32H4 2026-05-19 14:11:34 +03:00
Konstantin Kondrashov 7aa4199e5e fixup! feat(bootloader): Support recovery bootloader for ESP32S31 and ESP32P4 2026-05-12 18:21:20 +03:00
Konstantin Kondrashov dd9a0a9a93 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-08 16:45:14 +03:00
Konstantin Kondrashov e8609f59a8 feat(bootloader): Support recovery bootloader for ESP32S31 and ESP32P4 2026-05-08 16:45:14 +03:00
Konstantin Kondrashov 7b50e24fcf 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-07 10:29:58 +03:00
Konstantin Kondrashov 0dc907c820 fix(bootloader_hooks): Fix log_v2 support in bootloader hooks
Closes https://github.com/espressif/esp-idf/issues/18482
2026-05-06 13:47:59 +03:00
Konstantin Kondrashov c29532f98c feat(efuse): Support efuses for ESP32S31 2026-04-29 15:50:32 +03:00
Konstantin Kondrashov ea6b477da4 feat(efuse): Adds efuse calibration field for esp32c5 2026-04-17 09:54:00 +03:00
Konstantin Kondrashov 809b8cd720 feat(efuse): Adds efuse for ESP32-H2 revision 1.2 2026-04-13 10:39:13 +08:00
Konstantin Kondrashov 8701705ec3 feat(efuse): Update efuse table for ESP32-H4 2026-04-01 16:15:45 +03:00
Konstantin Kondrashov 690256b982 fix(doc): Update MAC-address related documentation for ESP32-P4
Closes https://github.com/espressif/esp-idf/issues/18159
2026-03-06 14:28:32 +02:00
Konstantin Kondrashov 74561963e1 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-05 10:39:34 +02:00
Konstantin Kondrashov a00bb2d1cb fix(xtensa): Reset zero overhead loop counter in ISRs 2026-03-04 09:09:09 +02:00
Konstantin Kondrashov fa9b7843bc fix(freertos): fix riscv pxEndOfStack offset alignment
Closes https://github.com/espressif/esp-idf/issues/18256
2026-02-20 12:42:26 +02:00
Konstantin Kondrashov 3b238b2ddb fix(esp_system): Fix flaky tests with memory leak in sleep test 2026-02-17 17:36:53 +02:00
Konstantin Kondrashov b40aae66e3 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-02-13 16:12:58 +02:00
Konstantin Kondrashov ac8fd0f491 fix(esp32): Fix IRAM_AS_8BIT_ACCESSIBLE_MEMORY accessible from ISR1 2026-02-13 11:30:44 +02:00
Konstantin Kondrashov 74ee653fed 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-02-11 16:12:26 +02:00
Konstantin Kondrashov be517fa8c0 feat(efuse): Defer WR_DIS eFuse burning 2026-02-11 11:07:12 +02:00
Konstantin Kondrashov e86fc30571 fix(app_update): Fix tests for app_update on ESP32C5 2026-01-23 14:32:39 +02:00
Konstantin Kondrashov bb8a5cfe36 fix(examples): Use another efuse block for custom efuse table on ESP32H2 2026-01-21 09:29:10 +02:00
Konstantin Kondrashov 1d7a8b7d4b feat(docs): Adds clarifications on RTC clock source selection 2026-01-09 12:38:33 +02:00
Konstantin Kondrashov 8569da1ba8 feat(esp_timer): Adds blocking stop function 2026-01-07 09:26:57 +02:00
Konstantin Kondrashov 3e74ff2b33 refactor(esp_timer): Remove unnecessary nested list lock 2026-01-06 21:52:53 +02:00
Konstantin Kondrashov 0255a7e164 feat(esp_timer): esp_timer_is_active while callback is running 2026-01-06 21:52:53 +02:00
Konstantin Kondrashov 4616a8269f feat(hal): Adds half-word read/write checks for efuse 2025-12-09 16:17:09 +02:00
Konstantin Kondrashov 8cbeb5fb90 feat(efuse): Adds efuse flash fields for esp32c2 2025-12-09 16:14:16 +02:00
Konstantin Kondrashov 642126dde0 feat(bootloader_support): Update depends_components
Where bootloader_support is used as depends_components:
- components/app_update/test_apps
- components/bootloader_support/test_apps/bootloader_support
- components/bootloader_support/test_apps/rtc_custom_section
- examples/custom_bootloader/bootloader_extra_dir
- examples/custom_bootloader/bootloader_hooks
- examples/custom_bootloader/bootloader_multiboot
- examples/custom_bootloader/bootloader_override
- examples/security/flash_encryption
- examples/security/security_features_app
- examples/system/efuse
- examples/system/ota/native_ota_example
- tools/test_apps/system/mmu_page_size
2025-11-26 18:23:09 +02:00
Konstantin Kondrashov 09c5424c98 feat(esp_rom): Update depends_components
Where esp_rom is used as depends_components:
- components/esp_rom/test_apps/linux_rom_apis
- components/esp_rom/test_apps/rom_impl_components
- components/esp_rom/test_apps/rom_tests
2025-11-26 17:42:53 +02:00
Konstantin Kondrashov d2a4f52aac feat(esp_event): Update depends_components
Where esp_event is used as depends_components:
- components/esp_event/host_test
- components/esp_event/test_apps
- examples/system/esp_event/default_event_loop
- examples/system/esp_event/user_event_loops
2025-11-26 17:05:10 +02:00
Konstantin Kondrashov 889a381153 feat(esp_event): Update depends_components
Where esp_event is used as depends_components:
- components/esp_event/test_apps
- components/esp_event/host_test
- examples/system/esp_event
2025-11-25 19:23:55 +02:00
Konstantin Kondrashov 8810327f9d feat(log): Update depends_components
Where log is used as depends_components:
- components/log/host_test
- components/log/test_apps
- tools/test_apps/system/log
2025-11-25 19:23:55 +02:00
Konstantin Kondrashov 41fddce773 feat(esp_timer): Update depends_components
Where esp_timer is used as depends_components:
- components/esp_timer/test_apps
- examples/system/esp_timer
2025-11-25 19:23:45 +02:00
Konstantin Kondrashov c267c6245a feat(efuse): Update depends_components
Where efuse is used as depends_components:
 - to test efuse APIs:
    - components/efuse/test_apps
    - examples/system/efuse
 - to test secuity APIs:
    - components/hal/test_apps/crypto
 - to test adc calib APIs:
    - components/esp_adc/test_apps/adc
    - examples/peripherals/adc/continuous_read
    - examples/peripherals/adc/oneshot_read
2025-11-25 17:55:52 +02:00
Konstantin Kondrashov ccee6d23a2 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-24 17:13:54 +02:00
Konstantin Kondrashov 3f519e8a97 fix(efuse): Adds missing SOC defines for ESP32-P4 v3 2025-11-24 17:13:54 +02:00
Konstantin Kondrashov 0084024973 feat(systimer): Support systimer/esp_timer/OS tick for esp32h4 2025-11-21 15:18:43 +02:00
Konstantin Kondrashov da720ce74c 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-20 12:38:30 +02:00
Konstantin Kondrashov e7054752ed feat(ulp): Removes ambiguity between ticks and cycles in ULP APIs
Closes https://github.com/espressif/esp-idf/issues/17820
2025-11-06 11:11:11 +02:00
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