From f17b005ca167c3a655d0946cbd140907abaf9fb5 Mon Sep 17 00:00:00 2001 From: Dominik Ermel Date: Mon, 31 Jul 2023 15:33:29 +0000 Subject: [PATCH] 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 --- boot/bootutil/src/bootutil_public.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/boot/bootutil/src/bootutil_public.c b/boot/bootutil/src/bootutil_public.c index 08e5d6f31..0f0d38554 100644 --- a/boot/bootutil/src/bootutil_public.c +++ b/boot/bootutil/src/bootutil_public.c @@ -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;