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? > + ret = get_errno(safe_execve(path, argp, envp)); > unlock_user(p, arg1, 0); > > goto execve_end; -- Alex Bennée