Commit a2917ffc authored by Pavel Emelyanov's avatar Pavel Emelyanov

rst: Initialize task restore args after rst-mem remap

The plan is to move the args on rst-mem itself. Thus we need
to make sure it's initialized _after_ remap into restorer space.
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 3e895cc2
...@@ -2306,14 +2306,12 @@ static int sigreturn_restore(pid_t pid, CoreEntry *core) ...@@ -2306,14 +2306,12 @@ static int sigreturn_restore(pid_t pid, CoreEntry *core)
goto err; goto err;
} }
exec_mem_hint -= restorer_len;
memzero(mem, args_len); memzero(mem, args_len);
task_args = mem; task_args = mem;
thread_args = (struct thread_restore_args *)(task_args + 1); thread_args = (struct thread_restore_args *)(task_args + 1);
task_args->bootstrap_start = (void *)exec_mem_hint - restorer_len;
task_args->bootstrap_len = restore_bootstrap_len;
task_args->vdso_rt_size = vdso_rt_size;
/* /*
* Get a reference to shared memory area which is * Get a reference to shared memory area which is
* used to signal if shmem restoration complete * used to signal if shmem restoration complete
...@@ -2329,17 +2327,22 @@ static int sigreturn_restore(pid_t pid, CoreEntry *core) ...@@ -2329,17 +2327,22 @@ static int sigreturn_restore(pid_t pid, CoreEntry *core)
ret = shmem_remap(task_entries, mem, TASK_ENTRIES_SIZE); ret = shmem_remap(task_entries, mem, TASK_ENTRIES_SIZE);
if (ret < 0) if (ret < 0)
goto err; goto err;
task_args->task_entries = mem;
mem += TASK_ENTRIES_SIZE; mem += TASK_ENTRIES_SIZE;
task_args->premmapped_addr = (unsigned long) current->rst->premmapped_addr; if (rst_mem_remap(mem))
task_args->premmapped_len = current->rst->premmapped_len; goto err;
task_args->task_entries = mem - TASK_ENTRIES_SIZE;
task_args->rst_mem = mem; task_args->rst_mem = mem;
task_args->rst_mem_size = rst_mem_remap_size(); task_args->rst_mem_size = rst_mem_remap_size();
if (rst_mem_remap(mem))
goto err; task_args->bootstrap_start = (void *)exec_mem_hint;
task_args->bootstrap_len = restore_bootstrap_len;
task_args->vdso_rt_size = vdso_rt_size;
task_args->premmapped_addr = (unsigned long) current->rst->premmapped_addr;
task_args->premmapped_len = current->rst->premmapped_len;
task_args->shmems = rst_mem_remap_ptr(rst_shmems, RM_SHREMAP); task_args->shmems = rst_mem_remap_ptr(rst_shmems, RM_SHREMAP);
task_args->nr_shmems = nr_shmems; task_args->nr_shmems = nr_shmems;
......
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