From: Rich Felker <dalias@libc.org>
To: Askar Safin <safinaskar@zohomail.com>
Cc: musl <musl@lists.openwall.com>
Subject: Re: [musl] [bug] Ctrl-Z when process is doing posix_spawn makes the process hard to kill
Date: Fri, 17 Jan 2025 01:46:35 -0500 [thread overview]
Message-ID: <20250117064634.GK10433@brightrain.aerifal.cx> (raw)
In-Reply-To: <20250117063709.GJ10433@brightrain.aerifal.cx>
On Fri, Jan 17, 2025 at 01:37:09AM -0500, Rich Felker wrote:
> On Fri, Jan 17, 2025 at 03:14:03AM +0400, Askar Safin wrote:
> > I found a bug both in glibc and musl.
> >
> > If a process does posix_spawn+waitpid, then attempting to pause it using Ctrl-Z
> > sometimes doesn't work and, worse, makes the process unkillable by usual Ctrl-Z or Ctrl-C.
> >
> > The bug is described in full in this glibc issue: https://sourceware.org/bugzilla/show_bug.cgi?id=32565 .
> >
> > It is reproducible with musl on the same system I used to reproduce it with glibc (see the link).
> >
> > I compiled the code using "x86_64-linux-musl-gcc" wrapper provided by Debian.
> >
> > Please, CC me when replying.
>
> OK, I think this should be fixable by, if SIGTSTP is to be SIG_DFL in
> the spawned child, setting it to a no-op handler instead of SIG_DFL.
> It might actually make sense to just do this for all signals.
>
> Note that SIGSTOP, which is not blockable interceptible or ignorable,
> can't be handled this way, but the pid has not yet leaked to anything
> at this point, so the only way SIGSTOP can be generated is by a badly
> behaved program signaling random pids, which is not a case that needs
> to be handled gracefully.
>
> In theory SIGTTIN and SIGTTOU might be hazards too, but I don't think
> it's possible for a process to generate them without attempting to
> perform io, which the pre-exec child doesn't do. Still handling them
> might be a good safety measure in case I'm wrong.
>
> I'll prepare one or more versions of a proposed patch.
One complication I'll need to address: the pre-exec child does not
have enough stack to execute (even a no-op) signal handler. So the
parent is going to need to handle checking the runtime-variable min
signal stack and ensuring it provides enough. And the no-op signal
handler will need to be installed to run with all signals blocked so
that recursive signals can't overflow a limit that only suffices for
one signal.
With those changes I think this approach works.
I think applying it to all signals is probably a bad idea in that it
would introduce a lot more syscall cost at spawn time. Just doing the
signals we need (and probably omitting SITTTIN/TTOU unless there's
good reason to believe they can happen) seems like the smart approach
not to make the fix annoyingly costly to users.
Rich
next prev parent reply other threads:[~2025-01-17 6:46 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-16 23:14 Askar Safin
2025-01-17 6:37 ` Rich Felker
2025-01-17 6:46 ` Rich Felker [this message]
2025-01-17 17:55 ` Askar Safin
2025-01-18 9:51 ` Florian Weimer
2025-01-18 10:23 ` Rich Felker
2025-01-18 11:13 ` Florian Weimer
2025-01-18 20:58 ` Askar Safin
2025-01-18 11:17 ` Rich Felker
2025-01-18 20:16 ` Markus Wichmann
2025-01-19 3:18 ` Rich Felker
2025-01-18 20:52 ` Askar Safin
2025-01-22 21:45 ` Askar Safin
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=20250117064634.GK10433@brightrain.aerifal.cx \
--to=dalias@libc.org \
--cc=musl@lists.openwall.com \
--cc=safinaskar@zohomail.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).