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>
diff --git a/boot/bootutil/src/bootutil_public.c b/boot/bootutil/src/bootutil_public.c
index 08e5d6f..0f0d385 100644
--- a/boot/bootutil/src/bootutil_public.c
+++ b/boot/bootutil/src/bootutil_public.c
@@ -458,6 +458,20 @@
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 @@
} 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;