Richard Henderson <richard.hender...@linaro.org> writes:
> Or really, just clone devolving into fork. This should not ever happen > in practice. We do want to reserve calling cpu_clone_regs for the case > in which we are actually performing a clone. > > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> Reviewed-by: Alex Bennée <alex.ben...@linaro.org> > --- > linux-user/syscall.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index dfc851cc35..5bf8d13de7 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -6502,10 +6502,14 @@ static int do_fork(CPUArchState *env, unsigned int > flags, abi_ulong newsp, > pthread_mutex_destroy(&info.mutex); > pthread_mutex_unlock(&clone_lock); > } else { > - /* if no CLONE_VM, we consider it is a fork */ > + /* If no CLONE_VM, we consider it is a fork. */ > if (flags & CLONE_INVALID_FORK_FLAGS) { > return -TARGET_EINVAL; > } > + /* As a fork, setting a new sp does not make sense. */ > + if (newsp) { > + return -TARGET_EINVAL; > + } > > /* We can't support custom termination signals */ > if ((flags & CSIGNAL) != TARGET_SIGCHLD) { > @@ -6520,7 +6524,6 @@ static int do_fork(CPUArchState *env, unsigned int > flags, abi_ulong newsp, > ret = fork(); > if (ret == 0) { > /* Child Process. */ > - cpu_clone_regs(env, newsp); > fork_end(1); > /* There is a race condition here. The parent process could > theoretically read the TID in the child process before the > child -- Alex Bennée