From: Rich Felker <dalias@aerifal.cx>
To: "Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com>
Cc: David Drysdale <drysdale@google.com>,
"Eric W. Biederman" <ebiederm@xmission.com>,
Andy Lutomirski <luto@amacapital.net>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Meredydd Luff <meredydd@senatehouse.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
David Miller <davem@davemloft.net>,
Thomas Gleixner <tglx@linutronix.de>,
Stephen Rothwell <sfr@canb.auug.org.au>,
Oleg Nesterov <oleg@redhat.com>, Ingo Molnar <mingo@redhat.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Kees Cook <keescook@chromium.org>, Arnd Bergmann <arnd@arndb.de>,
Christoph Hellwig <hch@infradead.org>, X86 ML <x86@kernel.org>,
linux-arch <linux-arch@vger.kernel.org>,
Linux API <linux-api@vger.kernel.org>,
sparclinux@vger.kernel.org
Subject: Re: [PATCHv10 man-pages 5/5] execveat.2: initial man page for execveat(2)
Date: Sat, 10 Jan 2015 08:31:20 -0500 [thread overview]
Message-ID: <20150110133120.GF4574@brightrain.aerifal.cx> (raw)
In-Reply-To: <54B0E282.7090203@gmail.com>
On Sat, Jan 10, 2015 at 09:27:46AM +0100, Michael Kerrisk (man-pages) wrote:
> On 01/09/2015 06:46 PM, David Drysdale wrote:
> > On Fri, Jan 9, 2015 at 4:13 PM, Rich Felker <dalias@aerifal.cx> wrote:
> >> On Fri, Jan 09, 2015 at 04:47:31PM +0100, Michael Kerrisk (man-pages) wrote:
> >>> On 11/24/2014 12:53 PM, David Drysdale wrote:
> >>>> Signed-off-by: David Drysdale <drysdale@google.com>
> >>>> ---
> >>>> man2/execveat.2 | 153 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >>>> 1 file changed, 153 insertions(+)
> >>>> create mode 100644 man2/execveat.2
> >>>
> >>> David,
> >>>
> >>> Thanks for the very nicely prepared man page. I've done
> >>> a few very light edits, and will release the version below
> >>> with the next man-pages release.
> >>>
> >>> I have one question. In the message accompanying
> >>> commit 51f39a1f0cea1cacf8c787f652f26dfee9611874 you wrote:
> >>>
> >>> The filename fed to the executed program as argv[0] (or the name of the
> >>> script fed to a script interpreter) will be of the form "/dev/fd/<fd>"
> >>> (for an empty filename) or "/dev/fd/<fd>/<filename>", effectively
> >>> reflecting how the executable was found. This does however mean that
> >>> execution of a script in a /proc-less environment won't work; also, script
> >>> execution via an O_CLOEXEC file descriptor fails (as the file will not be
> >>> accessible after exec).
> >>>
> >>> How does one produce this situation where the execed program sees
> >>> argv[0] as a /dev/fd path? (i.e., what would the execveat()
> >>> call look like?) I tried to produce this scenario, but could not.
> >>
> >> I think this is wrong. argv[0] is an arbitrary string provided by the
> >> caller and would never be derived from the fd passed.
> >
> > Yeah, I think I just wrote that wrong, it's only relevant for scripts.
> > As Rich says, for normal binaries argv[0] is just the argv[0] that
> > was passed into the execve[at] call. For a script, the code in
> > fs/binfmt_script.c will remove the original argv[0] and put the
> > interpreter name and the script filename (e.g. "/bin/sh",
> > "/dev/fd/6/script") in as 2 arguments in its place.
>
> So, on reflection, I think it's worth saying something about this, and
> I added the following text to the man page:
>
> NOTES
> When asked to execute a script file, the argv[0] that is passed
> to the script interpreter is a string of the form /dev/fd/N or
> /dev/fd/N/P, where N is the number of the file descriptor passed
> via the dirfd argument. A string of the first form occurs when
> AT_EMPTY_PATH is employed. A string of the second form occurs
> when the script is specified via both dirfd and pathname; in this
> case, P is the value given in pathname.
While I'm aware that you're simply documenting, it seems unnecessary
to me (and unnecessarily complicating of the cloexec issue) to have
the /dev/fd/N/P form. This could always be resolved by the kernel to a
single temp fd for the new process to use, and in fact it's probably
preferable to always get a "temp fd" in case the fd passed to fexecve
is NOT a throwaway one (e.g. if the original fd was stdin or
something); the program being executed should not have to use ugly and
error-prone heuristics to decide if it should close the exec fd.
On the other hand, this resolution could be done by userspace (open
with O_PATH|O_CLOEXEC prior to making the fexecveat syscall, and
always passing AT_EMPTY_PATH to the kernel) if desirable, so maybe it
doesn't make sense to have the kernel do it. In this sense the whole
"at" part of fexecveat becomes vestigial, though.
Any thoughts?
Rich
next prev parent reply other threads:[~2015-01-10 13:31 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-24 11:53 [PATCHv10 0/5] syscalls,x86,sparc: Add execveat() system call David Drysdale
2014-11-24 11:53 ` [PATCHv10 1/5] syscalls: implement " David Drysdale
2014-11-24 11:53 ` [PATCHv10 2/5] x86: Hook up execveat " David Drysdale
[not found] ` <1416830039-21952-3-git-send-email-drysdale-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2014-11-24 12:45 ` Thomas Gleixner
2014-11-24 17:06 ` Dan Carpenter
2014-11-24 18:26 ` David Drysdale
[not found] ` <CAHse=S-DS=NGC619Uhzkbd-EKa0D+HgBq3rE1czmLdoxAFswPg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-11-25 12:16 ` Dan Carpenter
2014-11-24 18:53 ` Thomas Gleixner
2014-11-24 11:53 ` [PATCHv10 3/5] syscalls: add selftest for execveat(2) David Drysdale
2014-11-24 11:53 ` [PATCHv10 4/5] sparc: Hook up execveat system call David Drysdale
2014-11-24 18:36 ` David Miller
2014-11-24 11:53 ` [PATCHv10 man-pages 5/5] execveat.2: initial man page for execveat(2) David Drysdale
2015-01-09 15:47 ` Michael Kerrisk (man-pages)
2015-01-09 16:13 ` Rich Felker
[not found] ` <20150109161302.GQ4574-C3MtFaGISjmo6RMmaWD+6Sb1p8zYI1N1@public.gmane.org>
2015-01-09 17:46 ` David Drysdale
[not found] ` <CAHse=S88Jy5ZKM_VY5onfvxX7dTMngnxuHfuLeSuzvKvQNP19A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-09 20:48 ` Rich Felker
2015-01-09 20:56 ` Al Viro
[not found] ` <20150109205626.GK22149-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org>
2015-01-09 20:59 ` Rich Felker
[not found] ` <20150109205926.GT4574-C3MtFaGISjmo6RMmaWD+6Sb1p8zYI1N1@public.gmane.org>
2015-01-09 21:09 ` Al Viro
2015-01-09 21:28 ` Rich Felker
2015-01-09 21:50 ` Al Viro
2015-01-09 22:17 ` Rich Felker
2015-01-09 22:33 ` Al Viro
2015-01-09 22:42 ` Rich Felker
[not found] ` <20150109224252.GY4574-C3MtFaGISjmo6RMmaWD+6Sb1p8zYI1N1@public.gmane.org>
2015-01-09 22:57 ` Al Viro
2015-01-09 23:12 ` Rich Felker
2015-01-09 23:24 ` Andy Lutomirski
2015-01-09 23:37 ` Rich Felker
2015-01-10 0:01 ` Al Viro
2015-01-09 23:36 ` Al Viro
[not found] ` <20150109233644.GR22149-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org>
2015-01-10 3:03 ` Al Viro
2015-01-10 3:41 ` Rich Felker
2015-01-10 4:14 ` Al Viro
2015-01-10 5:57 ` Rich Felker
2015-01-10 22:27 ` Eric W. Biederman
2015-01-11 1:15 ` Rich Felker
2015-01-11 2:09 ` Eric W. Biederman
[not found] ` <87oaq6oypl.fsf-JOvCrm2gF+uungPnsOpG7nhyD016LWXt@public.gmane.org>
2015-01-11 11:02 ` Christoph Hellwig
2015-01-12 14:18 ` David Drysdale
[not found] ` <20150109212852.GU4574-C3MtFaGISjmo6RMmaWD+6Sb1p8zYI1N1@public.gmane.org>
2015-01-09 22:13 ` Eric W. Biederman
2015-01-09 22:38 ` Rich Felker
[not found] ` <20150109223843.GX4574-C3MtFaGISjmo6RMmaWD+6Sb1p8zYI1N1@public.gmane.org>
2015-01-10 1:17 ` Eric W. Biederman
[not found] ` <87mw5rtowa.fsf-JOvCrm2gF+uungPnsOpG7nhyD016LWXt@public.gmane.org>
2015-01-10 1:33 ` Rich Felker
2015-01-12 11:33 ` David Drysdale
2015-01-12 16:07 ` Rich Felker
2015-01-10 7:13 ` Michael Kerrisk (man-pages)
2015-01-09 21:20 ` Eric W. Biederman
[not found] ` <877fwvy7ln.fsf-JOvCrm2gF+uungPnsOpG7nhyD016LWXt@public.gmane.org>
2015-01-09 21:31 ` Rich Felker
2015-01-10 7:43 ` Michael Kerrisk (man-pages)
2015-01-10 8:27 ` Michael Kerrisk (man-pages)
2015-01-10 13:31 ` Rich Felker [this message]
2015-01-10 7:38 ` Michael Kerrisk (man-pages)
2015-01-09 18:02 ` David Drysdale
[not found] ` <CAHse=S9kRj00eRbB+7DQd39Cso1O2LcmZpBVCbuUa9EwRQKv_w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-01-10 7:56 ` Michael Kerrisk (man-pages)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150110133120.GF4574@brightrain.aerifal.cx \
--to=dalias@aerifal.cx \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=davem@davemloft.net \
--cc=drysdale@google.com \
--cc=ebiederm@xmission.com \
--cc=hch@infradead.org \
--cc=hpa@zytor.com \
--cc=keescook@chromium.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=meredydd@senatehouse.org \
--cc=mingo@redhat.com \
--cc=mtk.manpages@gmail.com \
--cc=oleg@redhat.com \
--cc=sfr@canb.auug.org.au \
--cc=sparclinux@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=viro@zeniv.linux.org.uk \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).