Skip to content

Commit

Permalink
[nrf fromtree] boot: bootutil: loader: Let image version comparison
Browse files Browse the repository at this point in the history
... use build number

Change allows using build number in image version comparison.

Signed-off-by: Marek Pieta <Marek.Pieta@nordicsemi.no>
(cherry picked from commit a95a41b)
Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
  • Loading branch information
MarekPieta authored and tejlmand committed May 3, 2023
1 parent ba0dc61 commit 3b7c7fb
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 5 deletions.
22 changes: 17 additions & 5 deletions boot/bootutil/src/loader.c
Original file line number Diff line number Diff line change
Expand Up @@ -635,15 +635,17 @@ boot_check_header_erased(struct boot_loader_state *state, int slot)
defined(MCUBOOT_RAM_LOAD) || \
defined(MCUBOOT_DOWNGRADE_PREVENTION)
/**
* Compare image version numbers not including the build number
* Compare image version numbers
*
* By default, the comparison does not take build number into account.
* Enable MCUBOOT_VERSION_CMP_USE_BUILD_NUMBER to take the build number into account.
*
* @param ver1 Pointer to the first image version to compare.
* @param ver2 Pointer to the second image version to compare.
*
* @retval -1 If ver1 is strictly less than ver2.
* @retval 0 If the image version numbers are equal,
* (not including the build number).
* @retval 1 If ver1 is strictly greater than ver2.
* @retval -1 If ver1 is less than ver2.
* @retval 0 If the image version numbers are equal.
* @retval 1 If ver1 is greater than ver2.
*/
static int
boot_version_cmp(const struct image_version *ver1,
Expand All @@ -670,6 +672,16 @@ boot_version_cmp(const struct image_version *ver1,
return -1;
}

#if defined(MCUBOOT_VERSION_CMP_USE_BUILD_NUMBER)
/* The revisions are equal, continue comparison. */
if (ver1->iv_build_num > ver2->iv_build_num) {
return 1;
}
if (ver1->iv_build_num < ver2->iv_build_num) {
return -1;
}
#endif

return 0;
}
#endif
Expand Down
9 changes: 9 additions & 0 deletions boot/zephyr/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,15 @@ config UPDATEABLE_IMAGE_NUMBER
help
Enables support of multi image update.

config BOOT_VERSION_CMP_USE_BUILD_NUMBER
bool "Use build number while comparing image version"
depends on (UPDATEABLE_IMAGE_NUMBER > 1) || BOOT_DIRECT_XIP || \
BOOT_RAM_LOAD || MCUBOOT_DOWNGRADE_PREVENTION
help
By default, the image version comparison relies only on version major,
minor and revision. Enable this option to take into account the build
number as well.

choice BOOT_DOWNGRADE_PREVENTION_CHOICE
prompt "Downgrade prevention"
optional
Expand Down
4 changes: 4 additions & 0 deletions boot/zephyr/include/mcuboot_config/mcuboot_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,10 @@
#define MCUBOOT_IMAGE_NUMBER 1
#endif

#ifdef CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER
#define MCUBOOT_VERSION_CMP_USE_BUILD_NUMBER
#endif

#ifdef CONFIG_BOOT_SWAP_SAVE_ENCTLV
#define MCUBOOT_SWAP_SAVE_ENCTLV 1
#endif
Expand Down

0 comments on commit 3b7c7fb

Please sign in to comment.