boot: boot_serial: Fix issue with encrypted second slot images
Fixes issues whereby encrypted images were not properly listed due
to not treating them as encrypted, also removes a piece of wrong
hack code that would never run as the primary slot cannot be
encrypted.
Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
diff --git a/boot/bootutil/include/bootutil/bootutil_public.h b/boot/bootutil/include/bootutil/bootutil_public.h
index 90b1a1c..e8d83a1 100644
--- a/boot/bootutil/include/bootutil/bootutil_public.h
+++ b/boot/bootutil/include/bootutil/bootutil_public.h
@@ -43,6 +43,7 @@
#include <string.h>
#include <flash_map_backend/flash_map_backend.h>
#include <mcuboot_config/mcuboot_config.h>
+#include <bootutil/image.h>
#ifdef __cplusplus
extern "C" {
@@ -294,6 +295,18 @@
int
boot_set_next(const struct flash_area *fa, bool active, bool confirm);
+/**
+ * Attempts to load image header from flash; verifies flash header fields.
+ *
+ * @param[in] fa_p flash area pointer
+ * @param[out] hdr buffer for image header
+ *
+ * @return 0 on success, error code otherwise
+ */
+int
+boot_image_load_header(const struct flash_area *fa_p,
+ struct image_header *hdr);
+
#ifdef __cplusplus
}
#endif
diff --git a/boot/bootutil/src/bootutil_public.c b/boot/bootutil/src/bootutil_public.c
index f245739..8e70086 100644
--- a/boot/bootutil/src/bootutil_public.c
+++ b/boot/bootutil/src/bootutil_public.c
@@ -643,3 +643,36 @@
{
return boot_set_confirmed_multi(0);
}
+
+int
+boot_image_load_header(const struct flash_area *fa_p,
+ struct image_header *hdr)
+{
+ uint32_t size;
+ int rc = flash_area_read(fa_p, 0, hdr, sizeof *hdr);
+
+ if (rc != 0) {
+ rc = BOOT_EFLASH;
+ BOOT_LOG_ERR("Failed reading image header");
+ return BOOT_EFLASH;
+ }
+
+ if (hdr->ih_magic != IMAGE_MAGIC) {
+ BOOT_LOG_ERR("Bad image magic 0x%lx", (unsigned long)hdr->ih_magic);
+
+ return BOOT_EBADIMAGE;
+ }
+
+ if (hdr->ih_flags & IMAGE_F_NON_BOOTABLE) {
+ BOOT_LOG_ERR("Image not bootable");
+
+ return BOOT_EBADIMAGE;
+ }
+
+ if (!boot_u32_safe_add(&size, hdr->ih_img_size, hdr->ih_hdr_size) ||
+ size >= flash_area_get_size(fa_p)) {
+ return BOOT_EBADIMAGE;
+ }
+
+ return 0;
+}