From: Simon Glass Date: Mon, 21 Oct 2019 23:26:49 +0000 (-0600) Subject: bootstage: Avoid conflicts between stash/unstash X-Git-Tag: v2020.01-rc2~27^2~6 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=65b2d96f4c5e3f9084bc04cf5a5d7fc7a2285a72;p=oweals%2Fu-boot.git bootstage: Avoid conflicts between stash/unstash At present there is a single shared address for bootstage data in both TPL and SPL. If SPL unstashs TPL bootstage info and then stashes it again to pass it to U-Boot, the new stash overwrites the strings of the old stash. Fix this by duplicating the strings into the malloc() region. This should be a small code. Fix the header-file order at the same time. This problem doesn't happen at the next stage (SPL->U-Boot) since U-Boot relocates the boostage data. Signed-off-by: Simon Glass --- diff --git a/common/bootstage.c b/common/bootstage.c index fe36bac047..4557ed4508 100644 --- a/common/bootstage.c +++ b/common/bootstage.c @@ -10,9 +10,10 @@ */ #include -#include #include +#include #include +#include DECLARE_GLOBAL_DATA_PTR; @@ -472,6 +473,8 @@ int bootstage_unstash(const void *base, int size) for (rec = data->record + data->next_id, i = 0; i < hdr->count; i++, rec++) { rec->name = ptr; + if (spl_phase() == PHASE_SPL) + rec->name = strdup(ptr); /* Assume no data corruption here */ ptr += strlen(ptr) + 1;