mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-28 18:11:33 +00:00
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 <sjg@chromium.org>
This commit is contained in:
parent
ed54bdaf88
commit
65b2d96f4c
1 changed files with 4 additions and 1 deletions
|
@ -10,9 +10,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <linux/libfdt.h>
|
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
#include <spl.h>
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
|
#include <linux/libfdt.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
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;
|
for (rec = data->record + data->next_id, i = 0; i < hdr->count;
|
||||||
i++, rec++) {
|
i++, rec++) {
|
||||||
rec->name = ptr;
|
rec->name = ptr;
|
||||||
|
if (spl_phase() == PHASE_SPL)
|
||||||
|
rec->name = strdup(ptr);
|
||||||
|
|
||||||
/* Assume no data corruption here */
|
/* Assume no data corruption here */
|
||||||
ptr += strlen(ptr) + 1;
|
ptr += strlen(ptr) + 1;
|
||||||
|
|
Loading…
Add table
Reference in a new issue