From 6baadad1523cd261f1522e2771fee63b7887572b Mon Sep 17 00:00:00 2001 From: Francisco Molina Date: Tue, 2 Feb 2021 10:53:24 +0100 Subject: [PATCH] sys/riotboot/flashwrite: when invalidating erase checksum as well --- sys/riotboot/flashwrite.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/sys/riotboot/flashwrite.c b/sys/riotboot/flashwrite.c index e5ef3134ae..2088f67953 100644 --- a/sys/riotboot/flashwrite.c +++ b/sys/riotboot/flashwrite.c @@ -30,11 +30,6 @@ #define LOG_PREFIX "riotboot_flashwrite: " #include "log.h" -/** - * @brief Magic number used to invalidate a slot - */ -#define INVALIDATE_HDR 0xAA - static inline size_t min(size_t a, size_t b) { return a <= b ? a : b; @@ -178,10 +173,14 @@ int riotboot_flashwrite_invalidate(int slot) return -2; } - uint8_t data_flash[4]; - memset(data_flash, INVALIDATE_HDR, sizeof(data_flash)); + /* invalidate header (checksum and magic number must be invalidated), + write the whole header to avoid running in memory alignment issues + with FLASHPAGE_WRITE_BLOCK_SIZE */ + riotboot_hdr_t tmp_hdr; + memset(&tmp_hdr, (~FLASHPAGE_ERASE_STATE), sizeof(riotboot_hdr_t)); - flashpage_write((void *)riotboot_slot_get_hdr(slot), data_flash, sizeof(data_flash)); + flashpage_write((void *)riotboot_slot_get_hdr(slot), &tmp_hdr, + sizeof(riotboot_hdr_t)); return 0; }