image encryption: fix enc_state array indexing for zephyr
enc_state table was indexed with assumption that
image flash area are subsequent and increasing numbers.
It might not be true while building zephyr.
Patch introduce flash_area_id_to_image_slot() implementation for
the zephyr port and uses it to assign proper slot number.
This API is already available in MyNewt.
Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
diff --git a/boot/bootutil/src/encrypted.c b/boot/bootutil/src/encrypted.c
index 14cbcd5..13ba2f4 100644
--- a/boot/bootutil/src/encrypted.c
+++ b/boot/bootutil/src/encrypted.c
@@ -233,7 +233,11 @@
uint8_t enckey_type;
int rc;
- slot = fap->fa_id - FLASH_AREA_IMAGE_PRIMARY;
+ rc = flash_area_id_to_image_slot(fap->fa_id);
+ if (rc < 0) {
+ return rc;
+ }
+ slot = rc;
/* Already loaded... */
if (enc_state[slot].valid) {
@@ -305,7 +309,16 @@
int
boot_enc_valid(const struct flash_area *fap)
{
- return enc_state[fap->fa_id - FLASH_AREA_IMAGE_PRIMARY].valid;
+ int rc;
+
+ rc = flash_area_id_to_image_slot(fap->fa_id);
+ if (rc < 0) {
+ /* can't get proper slot number - skip encryption, */
+ /* postpone the erro for a upper layer */
+ return 0;
+ }
+
+ return enc_state[rc].valid;
}
void
@@ -317,6 +330,7 @@
uint8_t u8;
uint8_t nonce[16];
uint8_t blk[16];
+ int rc;
memset(nonce, 0, 12);
off >>= 4;
@@ -325,7 +339,13 @@
nonce[14] = (uint8_t)(off >> 8);
nonce[15] = (uint8_t)off;
- enc = &enc_state[fap->fa_id - FLASH_AREA_IMAGE_PRIMARY];
+ rc = flash_area_id_to_image_slot(fap->fa_id);
+ if (rc < 0) {
+ assert(0);
+ return;
+ }
+
+ enc = &enc_state[rc];
assert(enc->valid == 1);
for (i = 0; i < sz; i++) {
if (i == 0 || blk_off == 0) {