[PATCH 08/11] boot: bootm: set the imagemap from bootm_start()
Daniel Golle
daniel at makrotopia.org
Wed Oct 14 01:40:04 PDT 2026
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 <daniel at makrotopia.org>
---
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
More information about the openwrt-devel
mailing list