bootutil: Fix boot_set_next passing wrong image number

The commit fixes boot_set_next always passing image 0 to
boot_write_swap_info, instead of the proper image number.
This has been affecting applications that tried to call boot_set_next
in multi-image MCUboot configuration using scratch-swap algorithm.

Fixes #1762

Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
This commit is contained in:
Dominik Ermel 2023-07-31 15:33:29 +00:00 committed by Andrzej Puzdrowski
parent fefc398cc1
commit f17b005ca1
1 changed files with 16 additions and 1 deletions

View File

@ -458,6 +458,20 @@ boot_swap_type_multi(int image_index)
return BOOT_SWAP_TYPE_NONE;
}
static int flash_area_id_to_image(int id)
{
#if BOOT_IMAGE_NUMBER > 2
#error "BOOT_IMAGE_NUMBER > 2 requires change to flash_area_id_to_image"
#elif BOOT_IMAGE_NUMBER > 1
if (FLASH_AREA_IMAGE_SECONDARY(0) == id || (FLASH_AREA_IMAGE_SECONDARY(1) == id)) {
return 1;
}
#else
(void)id;
#endif
return 0;
}
int
boot_set_next(const struct flash_area *fa, bool active, bool confirm)
{
@ -503,7 +517,8 @@ boot_set_next(const struct flash_area *fa, bool active, bool confirm)
} else {
swap_type = BOOT_SWAP_TYPE_TEST;
}
rc = boot_write_swap_info(fa, swap_type, 0);
rc = boot_write_swap_info(fa, swap_type,
flash_area_id_to_image(flash_area_get_id(fa)));
}
}
break;