On Mon, May 24, 2021 at 7:53 PM Alex Bennée <alex.ben...@linaro.org> wrote: > > > YAMAMOTO Takashi <yamam...@midokura.com> writes: > > > It seems somehow common to execve /proc/self/exe in docker > > or golang community these days. > > At least, moby "reexec" and runc "libcontainer" do that. > > > > Signed-off-by: YAMAMOTO Takashi <yamam...@midokura.com> > > --- > > linux-user/syscall.c | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > > index c9f812091c..a2b03ecb8b 100644 > > --- a/linux-user/syscall.c > > +++ b/linux-user/syscall.c > > @@ -8470,6 +8470,7 @@ static abi_long do_syscall1(void *cpu_env, int num, > > abi_long arg1, > > #endif > > case TARGET_NR_execve: > > { > > + const char *path; > > char **argp, **envp; > > int argc, envc; > > abi_ulong gp; > > @@ -8537,7 +8538,11 @@ static abi_long do_syscall1(void *cpu_env, int num, > > abi_long arg1, > > * before the execve completes and makes it the other > > * program's problem. > > */ > > - ret = get_errno(safe_execve(p, argp, envp)); > > + path = p; > > + if (is_proc_myself(path, "exe")) { > > + path = exec_path; > > + } > > This still relies on binfmt_misc kicking in to ensure the binary is > re-executed with qemu right?
right. > > > + ret = get_errno(safe_execve(path, argp, envp)); > > unlock_user(p, arg1, 0); > > > > goto execve_end; > > > -- > Alex Bennée