Fixes use of invalid header data
Fixes a bug when MCUBOOT_VALIDATE_SLOT0 is enabled which caused the
header in Slot 1 to be used for calculating the bootstrap offset. This
bug is masked when MCUBOOT_OVERWRITE_ONLY is not enabled because both
slots have the same header size (usually!). With MCUBOOT_OVERWRITE_ONLY
Slot 1 was erased and the header size would be read as 0xffff resulting
in a jump to the wrong address.
Signed-off-by: Fabio Utzig <utzig@apache.org>
diff --git a/boot/bootutil/src/loader.c b/boot/bootutil/src/loader.c
index 0bd2cf2..77fa63e 100644
--- a/boot/bootutil/src/loader.c
+++ b/boot/bootutil/src/loader.c
@@ -1339,10 +1339,16 @@
#ifdef MCUBOOT_VALIDATE_SLOT0
if (reload_headers) {
- rc = boot_read_image_headers();
- if (rc != 0) {
- goto out;
- }
+ rc = boot_read_image_headers();
+ if (rc != 0) {
+ goto out;
+ }
+ /* Since headers were reloaded, it can be assumed we just performed a
+ * swap or overwrite. Now the header info that should be used to
+ * provide the data for the bootstrap, which previously was at Slot 1,
+ * was updated to Slot 0.
+ */
+ slot = 0;
}
rc = boot_validate_slot(0);