From a95a41b3e12781b8c99cd429e0a3801847455348 Mon Sep 17 00:00:00 2001 From: Marek Pieta Date: Fri, 21 Apr 2023 14:03:19 +0200 Subject: [PATCH] boot: bootutil: loader: Let image version comparison use build number Change allows using build number in image version comparison. Signed-off-by: Marek Pieta --- boot/bootutil/src/loader.c | 22 ++++++++++++++----- boot/zephyr/Kconfig | 9 ++++++++ .../include/mcuboot_config/mcuboot_config.h | 4 ++++ 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/boot/bootutil/src/loader.c b/boot/bootutil/src/loader.c index b49de922..311e72e1 100644 --- a/boot/bootutil/src/loader.c +++ b/boot/bootutil/src/loader.c @@ -622,15 +622,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, @@ -657,6 +659,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 diff --git a/boot/zephyr/Kconfig b/boot/zephyr/Kconfig index b2321103..1493dc31 100644 --- a/boot/zephyr/Kconfig +++ b/boot/zephyr/Kconfig @@ -522,6 +522,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 diff --git a/boot/zephyr/include/mcuboot_config/mcuboot_config.h b/boot/zephyr/include/mcuboot_config/mcuboot_config.h index a235e15a..e14bf4c0 100644 --- a/boot/zephyr/include/mcuboot_config/mcuboot_config.h +++ b/boot/zephyr/include/mcuboot_config/mcuboot_config.h @@ -93,6 +93,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