Commit f17b005c authored by Dominik Ermel's avatar Dominik Ermel Committed by Andrzej Puzdrowski
Browse files

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: default avatarDominik Ermel <dominik.ermel@nordicsemi.no>
parent fefc398c
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -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;