From 035c1ac9018bb3940642544931f859ef3fa980e9 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Tue, 27 Apr 2021 15:15:35 +0200 Subject: [PATCH] Fixed esp_core_dump_image_erase() for flash encryption with 16byte long write buffer --- components/espcoredump/src/core_dump_flash.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/components/espcoredump/src/core_dump_flash.c b/components/espcoredump/src/core_dump_flash.c index 55b8383c67..ff9fb85313 100644 --- a/components/espcoredump/src/core_dump_flash.c +++ b/components/espcoredump/src/core_dump_flash.c @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. #include +#include +#include "esp_core_dump.h" #include "esp_partition.h" #include "esp_log.h" #include "esp_core_dump_types.h" @@ -456,9 +458,21 @@ esp_err_t esp_core_dump_image_erase(void) return err; } + // helper to create (multiple of) 16 byte long write buffers + struct __attribute__((__packed__)) { + uint32_t size; + char buf[16-sizeof(uint32_t)]; + } helper; + + _Static_assert(sizeof(helper) % 16 == 0, "esp_partition_write() needs multiple of 16 byte long buffers"); + // Mark core dump as deleted by setting field size - const uint32_t blank_size = BLANK_COREDUMP_SIZE; - err = esp_partition_write(core_part, 0, &blank_size, sizeof(blank_size)); + helper.size = BLANK_COREDUMP_SIZE; + + // fill the remaining bytes + memset(&helper.buf, '\0', sizeof(helper.buf)); + + err = esp_partition_write(core_part, 0, &helper, sizeof(helper)); if (err != ESP_OK) { ESP_LOGE(TAG, "Failed to write core dump partition size (%d)!", err); }