Commit 205b9f51 authored by Heinrich Schuchardt's avatar Heinrich Schuchardt 💬 Committed by Simon Glass
Browse files

sandbox: correct determination of the text base

os_find_text_base() assumes that first line of /proc/self/maps holds
information about the text. Hence we must call the function before calling
os_malloc() which calls mmap(0x10000000,).

Failure to do so has led to incorrect values for pc_reloc when an
exception was reported

    => exception undefined

    Illegal instruction
    pc = 0x5628d82e9d3c, pc_reloc = 0x5628c82e9d3c

as well as incorrect output of the bdinfo command

    => bdinfo
    relocaddr   = 0x0000000007858000
    reloc off   = 0x0000000010000000

Fixes: b308d9fd

 ("sandbox: Avoid using malloc() for system state")
Signed-off-by: Heinrich Schuchardt's avatarHeinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass's avatarSimon Glass <sjg@chromium.org>
parent 0e35b937
......@@ -436,10 +436,13 @@ void sandbox_reset(void)
int main(int argc, char *argv[])
{
struct sandbox_state *state;
void * text_base;
gd_t data;
int size;
int ret;
text_base = os_find_text_base();
/*
* Copy argv[] so that we can pass the arguments in the original
* sequence when resetting the sandbox.
......@@ -452,7 +455,7 @@ int main(int argc, char *argv[])
memset(&data, '\0', sizeof(data));
gd = &data;
gd->arch.text_base = os_find_text_base();
gd->arch.text_base = text_base;
ret = state_init();
if (ret)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment