Messages in this thread | | | From | (Eric W. Biederman) | Date | Wed, 20 May 2020 11:05:29 -0500 | Subject | Re: [PATCH v2 7/8] exec: Generic execfd support |
| |
Rob Landley <rob@landley.net> writes:
> On 5/18/20 7:33 PM, Eric W. Biederman wrote: >> >> Most of the support for passing the file descriptor of an executable >> to an interpreter already lives in the generic code and in binfmt_elf. >> Rework the fields in binfmt_elf that deal with executable file >> descriptor passing to make executable file descriptor passing a first >> class concept. > > I was reading this to try to figure out how to do execve(NULL, argv[], envp) to > re-exec self after a vfork() in a chroot with no /proc, and hit the most trivial > quibble ever:
We have /proc/self/exe today. If I understand you correctly you would like to do the equivalent of 'execve("/proc/self/exe", argv[], envp[])' without having proc mounted.
The file descriptor is stored in mm->exe_file.
Probably the most straight forward implementation is to allow execveat(AT_EXE_FILE, ...).
You can look at binfmt_misc for how to reopen an open file descriptor.
>> --- a/fs/exec.c >> +++ b/fs/exec.c >> @@ -1323,7 +1323,10 @@ int begin_new_exec(struct linux_binprm * bprm) >> */ >> set_mm_exe_file(bprm->mm, bprm->file); >> >> + /* If the binary is not readable than enforce mm->dumpable=0 */ > > then
It took me a minute yes good catch.
Eric
| |