On Wed, Nov 6, 2024 at 11:26 AM Richard Henderson
<richard.hender...@linaro.org> wrote:
>
> On 11/6/24 17:03, Noah Goldstein wrote:
> > On Wed, Nov 6, 2024 at 3:38 AM Richard Henderson
> > <richard.hender...@linaro.org> wrote:
> >>
> >> On 11/5/24 23:54, Noah Goldstein wrote:
> >>>>> You still need to handle is_proc_myself, for the guest binary.
> >>>
> >>> Would this by handled by basically do:
> >>>
> >>> ```
> >>> if (is_proc_myself(p, "exe")) {
> >>>           exe = exec_path;
> >>>           if (through_qemu)
> >>>               argp[argp_offset] = exec_path;
> >>> }
> >>> ```
> >>> Or am I missing something?
> >>
> >> Something like that, yes.
> >>
> >>>>> I wonder if those two cases are related.  Do we need to also add an 
> >>>>> argument so that we
> >>>>> can pass the executable to the next qemu via file descriptor?  I.e. 
> >>>>> execvat becomes
> >>>>>
> >>>>>        f = openat()
> >>>>>        execv(qemu, "-execfd", f)
> >>>>>
> >>>>> and is_proc_myself uses execfd, which we already have open.
> >>>
> >>> How does passing a fd from one process to another work?
> >> As long as the fd is not marked O_CLOEXEC, it stays open in the new 
> >> process.  Providing
> >> the number via command-line, or whatever, is sufficient for the new 
> >> process to know what
> >> is going on.
> >
> > Err I guess I was thinking its a bit weird having an option that is
> > only really applicable
> > if qemu is a child process. I.e the `-execfd` argument is not usable
> > from commandline.
>
> qemu-foo -execfd 3 3< /some/file
>
> Or perhaps opened via other tooling.
>
> >> I now realize this is necessary for the AT_EMPTY_PATH flag, where we only 
> >> have the file
> >> descriptor.
> >
> > We could also do something along the lines of:
> >
> > ```
> > fd = openat(dirfd, exe);
> > char new_exe[PATH_MAX];
> > char fd_path[PATH_MAX];
> > sprintf(fd_path, "/proc/self/fd/%d", fd);
> > readlink(fd_path, new_exe, PATH_MAX);
>
> Reading the link doesn't always work.
> Reading or passing the link means AT_SYMLINK_NOFOLLOW isn't honored.

Okay, fair enough, I will get started on adding `-execfd`
>
>
> r~

Reply via email to