mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Rich Felker <dalias@libc.org>
To: Alexey Izbyshev <izbyshev@ispras.ru>
Cc: musl@lists.openwall.com
Subject: Re: [musl] Potentially infinite loop in posix_spawn'ed child
Date: Tue, 25 May 2021 10:32:10 -0400	[thread overview]
Message-ID: <20210525143210.GH2546@brightrain.aerifal.cx> (raw)
In-Reply-To: <47bc2113ebf931665b6b88795159de2e@ispras.ru>

On Tue, May 25, 2021 at 09:30:18AM +0300, Alexey Izbyshev wrote:
> On 2021-05-24 23:33, Rich Felker wrote:
> >On Mon, May 24, 2021 at 01:09:21PM +0300, Alexey Izbyshev wrote:
> >>Hi,
> >>
> >>I've noticed the following loop at https://git.musl-libc.org/cgit/musl/tree/src/process/posix_spawn.c#n159:
> >>
> >>    exec(args->path, args->argv, args->envp);
> >>    ret = -errno;
> >>
> >>fail:
> >>    /* Since sizeof errno < PIPE_BUF, the write is atomic. */
> >>    ret = -ret;
> >>    if (ret) while (__syscall(SYS_write, p, &ret, sizeof ret) < 0);
> >>    _exit(127);
> >>
> >>Is there any reason that write is done in a loop? If SIGPIPE is
> >>blocked or ignored and the parent dies before this point, the child
> >>will spin in it forever.
> >
> >I suppose the special case of EPIPE should be considered here as no
> >need to inform the parent. Are there any other errors that should be
> >treated specially?
> >
> I'm not aware of any other errors that would need treatment. Is this
> loop intended to be a detection/debugging aid in case of an
> unexpected error?

It's not a debugging aid so much as a guarantee against forward
progress doing the wrong thing (wrongly reporting success to the
parent when the execve failed). I don't think there are any errors
that should be able to happen here aside from EPIPE though, short of
munging with syscall semantics using seccomp or something which is
outside the scope of what could be expected to work correctly.

Rich

  reply	other threads:[~2021-05-25 14:32 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-24 10:09 Alexey Izbyshev
2021-05-24 15:40 ` Szabolcs Nagy
2021-05-24 16:50   ` Alexey Izbyshev
2021-05-24 20:33 ` Rich Felker
2021-05-25  6:30   ` Alexey Izbyshev
2021-05-25 14:32     ` Rich Felker [this message]
2024-02-29 14:03       ` Alexey Izbyshev
2024-02-29 15:35         ` Rich Felker

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=20210525143210.GH2546@brightrain.aerifal.cx \
    --to=dalias@libc.org \
    --cc=izbyshev@ispras.ru \
    --cc=musl@lists.openwall.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

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).