bootm_run_states() puts the imagemap back into the global images struct
after bootm_start() has zeroed it, which leaves the invariant split
across two functions: any later state that calls bootm_start() again
drops the pointer, and BOOTM_STATE_RESTART is already close to doing so.

Pass the imagemap to bootm_start() and let it set the field while it
initialises the rest of the struct.

Signed-off-by: Daniel Golle <[email protected]>
---
 boot/bootm.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/boot/bootm.c b/boot/bootm.c
index b9aa83c3328..67df647d176 100644
--- a/boot/bootm.c
+++ b/boot/bootm.c
@@ -275,7 +275,7 @@ static int boot_get_kernel(const char *addr_fit, struct 
bootm_headers *images,
        return 0;
 }
 
-static int bootm_start(void)
+static int bootm_start(struct udevice *imagemap)
 {
        /*
         * Free dm-verity allocations from a prior boot attempt before
@@ -286,6 +286,7 @@ static int bootm_start(void)
        fit_verity_free(&images);
        memset((void *)&images, 0, sizeof(images));
        images.verify = env_get_yesno("verify");
+       images.imagemap = imagemap;
 
        bootstage_mark_name(BOOTSTAGE_ID_BOOTM_START, "bootm_start");
        images.state = BOOTM_STATE_START;
@@ -1198,15 +1199,8 @@ int bootm_run_states(struct bootm_info *bmi, int states)
         * Work through the states and see how far we get. We stop on
         * any error.
         */
-       if (states & BOOTM_STATE_START) {
-               ret = bootm_start();
-               /*
-                * bootm_start() zeroes the global images struct. Restore
-                * the loader pointer so the storage-backed path works.
-                */
-               if (IS_ENABLED(CONFIG_IMAGEMAP) && bmi->imagemap)
-                       images->imagemap = bmi->imagemap;
-       }
+       if (states & BOOTM_STATE_START)
+               ret = bootm_start(bmi->imagemap);
 
        if (!ret && (states & BOOTM_STATE_PRE_LOAD)) {
                /* Pre-load verification is not applicable to storage boot */
-- 
2.56.0

Reply via email to