mirror of https://github.com/wolfSSL/wolfBoot.git
armored: reset integrity state and extend sanity check
parent
93f068b930
commit
ed695bb0a2
|
|
@ -292,6 +292,55 @@ static void NOINLINEFUNCTION wolfBoot_image_clear_sha_ok(
|
|||
asm volatile("mov r2, #0":::"r2"); \
|
||||
asm volatile("mov r2, #0":::"r2"); \
|
||||
asm volatile("mov r2, #0":::"r2"); \
|
||||
/* Loading ~(sha_ok) flag, verifying */ \
|
||||
asm volatile("mov r2, %0" ::"r"((p)->not_sha_ok):"r2"); \
|
||||
asm volatile("cmp r2, #0xFFFFFFFE":::"cc"); \
|
||||
asm volatile("cmp r2, #0xFFFFFFFE":::"cc"); \
|
||||
asm volatile("cmp r2, #0xFFFFFFFE":::"cc"); \
|
||||
asm volatile("bne ."); \
|
||||
asm volatile("cmp r2, #0xFFFFFFFE":::"cc"); \
|
||||
asm volatile("cmp r2, #0xFFFFFFFE":::"cc"); \
|
||||
asm volatile("cmp r2, #0xFFFFFFFE":::"cc"); \
|
||||
asm volatile("bne .-4"); \
|
||||
asm volatile("cmp r2, #0xFFFFFFFE":::"cc"); \
|
||||
asm volatile("cmp r2, #0xFFFFFFFE":::"cc"); \
|
||||
asm volatile("cmp r2, #0xFFFFFFFE":::"cc"); \
|
||||
asm volatile("bne .-8"); \
|
||||
asm volatile("cmp r2, #0xFFFFFFFE":::"cc"); \
|
||||
asm volatile("cmp r2, #0xFFFFFFFE":::"cc"); \
|
||||
asm volatile("cmp r2, #0xFFFFFFFE":::"cc"); \
|
||||
asm volatile("bne .-12"); \
|
||||
/* Redundant set of r2=0 */ \
|
||||
asm volatile("mov r2, #0":::"r2"); \
|
||||
asm volatile("mov r2, #0":::"r2"); \
|
||||
asm volatile("mov r2, #0":::"r2"); \
|
||||
asm volatile("mov r2, #0":::"r2"); \
|
||||
asm volatile("mov r2, #0":::"r2"); \
|
||||
/* Loading canary value, verifying */ \
|
||||
asm volatile("mov r2, %0" ::"r"((p)->canary_FEEDCAFE):"r2"); \
|
||||
asm volatile("mov r0, %0" ::"r"(0xFEEDCAFE):"r0"); \
|
||||
asm volatile("cmp r2, r0":::"cc"); \
|
||||
asm volatile("cmp r2, r0":::"cc"); \
|
||||
asm volatile("cmp r2, r0":::"cc"); \
|
||||
asm volatile("bne ."); \
|
||||
asm volatile("cmp r2, r0":::"cc"); \
|
||||
asm volatile("cmp r2, r0":::"cc"); \
|
||||
asm volatile("cmp r2, r0":::"cc"); \
|
||||
asm volatile("bne .-4"); \
|
||||
asm volatile("cmp r2, r0":::"cc"); \
|
||||
asm volatile("cmp r2, r0":::"cc"); \
|
||||
asm volatile("cmp r2, r0":::"cc"); \
|
||||
asm volatile("bne .-8"); \
|
||||
asm volatile("cmp r2, r0":::"cc"); \
|
||||
asm volatile("cmp r2, r0":::"cc"); \
|
||||
asm volatile("cmp r2, r0":::"cc"); \
|
||||
asm volatile("bne .-12"); \
|
||||
/* Redundant set of r2=0 */ \
|
||||
asm volatile("mov r2, #0":::"r2"); \
|
||||
asm volatile("mov r2, #0":::"r2"); \
|
||||
asm volatile("mov r2, #0":::"r2"); \
|
||||
asm volatile("mov r2, #0":::"r2"); \
|
||||
asm volatile("mov r2, #0":::"r2"); \
|
||||
/* Loading signature_ok flag, verifying */ \
|
||||
asm volatile("mov r2, %0" ::"r"((p)->signature_ok):"r2"); \
|
||||
asm volatile("cmp r2, #1":::"cc"); \
|
||||
|
|
|
|||
|
|
@ -1641,6 +1641,12 @@ int wolfBoot_verify_integrity(struct wolfBoot_image *img)
|
|||
{
|
||||
uint8_t *stored_sha;
|
||||
uint16_t stored_sha_len;
|
||||
/* Reset any cached integrity state up-front, so that a stale sha_ok (and
|
||||
* its complement/canary) left over from a previous verification of a
|
||||
* re-used image cannot survive a failed comparison and produce a
|
||||
* false-positive SHA_OK() result below. */
|
||||
img->sha_hash = NULL;
|
||||
wolfBoot_image_clear_sha_ok(img);
|
||||
stored_sha_len = get_header(img, WOLFBOOT_SHA_HDR, &stored_sha);
|
||||
if (stored_sha_len != WOLFBOOT_SHA_DIGEST_SIZE)
|
||||
return -1;
|
||||
|
|
|
|||
Loading…
Reference in New Issue