From: Steven Stewart-Gallus <sstewartgallus00-QKvm5KDIoDa7M0a00MdBSQ@public.gmane.org>
To: linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: execve is not atomic, what is the exit state of the process when execve fails after throwing away the original process image?
Date: Fri, 02 May 2014 02:19:52 +0000 (GMT) [thread overview]
Message-ID: <faa2c0e82f8a8.536300c8@langara.bc.ca> (raw)
Hello, can any kernel gurus please help me out with what happens on this weird
corner-case?
Quoting Rich Felker at http://ewontfix.com/14/:
> For common reasons it might fail, the execve syscall returns failure
> in the original process image, allowing the program to handle the
> error. However, failure of execve is not entirely atomic:
>
> The kernel may fail setting up the VM for the new process image
> after the original VM has already been destroyed; the main
> situation under which this would happen is resource exhaustion.
>
> Even after the kernel successfully sets up the new VM and
> transfers execution to the new process image, it's possible to
> have failures prior to the transfer of control to the actual
> application program. This could happen in the dynamic linker
> (resource exhaustion or other transient failures mapping required
> libraries or loading configuration files) or libc startup
> code. Using musl libc with static linking or even dynamic linking
> with no additional libraries eliminates these failure cases, but
> systemd is intended to be used with glibc.
execve is not atomic, what is the exit state of the process when
execve fails after throwing away the original process image?
I already have a hacky solution (see
https://gitorious.org/linted/linted/source/d25eac7a6fb58946ec8112771c0c56eb39fd1055:src/spawn/spawn.c)
to finding when a process fails before or at execve and now I want to
know what exit status is returned so I can give a nice error message.
next reply other threads:[~2014-05-02 2:19 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-02 2:19 Steven Stewart-Gallus [this message]
[not found] ` <faa2c0e82f8a8.536300c8-BTv7Ps/Sm75C8prJL3GQQw@public.gmane.org>
2014-05-03 17:45 ` execve is not atomic, what is the exit state of the process when execve fails after throwing away the original process image? Jann Horn
[not found] ` <20140503174510.GA7720-7cfQGs147y6a6lf8Wg2v7Z5kstrrjoWp@public.gmane.org>
2014-05-03 22:18 ` Steven Stewart-Gallus
[not found] ` <faa0c9e9297ad.53656b4c-BTv7Ps/Sm75C8prJL3GQQw@public.gmane.org>
2014-05-04 19:27 ` Michael Kerrisk (man-pages)
[not found] ` <53669485.3020007-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-05-04 20:15 ` 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=faa2c0e82f8a8.536300c8@langara.bc.ca \
--to=sstewartgallus00-qkvm5kdioda7m0a00mdbsq@public.gmane.org \
--cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.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).