Re: [PATCHv10 man-pages 5/5] execveat.2: initial man page for execveat(2)
From: Rich Felker <hidden>
Date: 2015-01-10 01:34:28
Also in:
linux-arch, lkml, sparclinux
On Fri, Jan 09, 2015 at 07:17:41PM -0600, Eric W. Biederman wrote:
Rich Felker [off-list ref] writes:quoted
I'm not proposing code because I'm a libc developer not a kernel developer. I know what's needed for userspace to provide a conforming fexecve to applications, not how to implement that on the kernel side, although I'm trying to provide constructive ideas. The hostility is really not necessary.Conforming to what? The open group fexecve says nothing about requiring a file descriptor passed to fexecve to have O_CLOEXEC.
It doesn't require it but it allows it, and in multithreaded programs that might run child processes (or library code that might be used in such situations), O_CLOEXEC is mandatory everywhere to avoid fd leaks.
Further looking at open group specification of exec it seems to indicate the preferred way to handle this is for the kernel to return O_NOEXEC and then libc gets to figure out how to run the shell script. Is that the kind of ``conforming'' implementation you are looking for?
This is a complex issue, and does not apply to native #! support (which is a supported executable format and thus not ENOEXEC) but rather standard POSIX shell scripts (which don't have a #! line at all). In this case the behavior of fexecve is perhaps under-specified. However, in cases where execve would succeed (without causing ENOEXEC), I think it's at least undesirable, if not non-conforming, for fexecve to fail. Should we request clarification from the Austin Group? Rich