NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
PR/60275 CVS commit: src/bin/sh
The following reply was made to PR bin/60275; it has been noted by GNATS.
From: "Robert Elz" <kre%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc:
Subject: PR/60275 CVS commit: src/bin/sh
Date: Wed, 20 May 2026 00:50:00 +0000
Module Name: src
Committed By: kre
Date: Wed May 20 00:50:00 UTC 2026
Modified Files:
src/bin/sh: eval.c eval.h trap.c
Log Message:
PR bin/60275 discard some arriving signals
The PR is only peripherally relevant to this, but it is all much
the same problem, over a fork() trapped signals are maintained,
and sh does not really want that.
In this case, when there is a vfork() a signal arriving for a
child (whether or not it should arrive and be processed) can be
treated as if it arrived for the parent, and cause a trap action
to be executed by the parent. (Never observed to have happened,
as best I am aware, but certainly looks as if it could.)
Avoid that, by making sure that the child process never records
a signal as having occurred, when it is being a vfork child
(while the parent is sharing memory with it).
Doing this meant making one variable that was previously local
to eval.c globally visible (exposing it in eval.h), and then
because the same name is used as a parameter in many other
functions, changing the actual variable name (just to avoid
potential compiler "shadowing" warnings) - which amounts to
most of the actual change here.
Then, make sure that variable is only ever set in the parent
while signals are blocked (for the actual fix for this PR),
so the parent in a signal handler will never see it set.
In the signal handler, treat that variable, if set, as
indicating that the child should not have received the signal
(it should have been, and will be soon, reset to SIG_DFL)
and continue to treat it as in the previous fix. Under no
circumstances record it as having been received, or the
memory shared with the parent will cause the parent to later
detect the signal as having been sent to it.
Comments added explaining things where appropriate.
To generate a diff of this commit:
cvs rdiff -u -r1.198 -r1.199 src/bin/sh/eval.c
cvs rdiff -u -r1.24 -r1.25 src/bin/sh/eval.h
cvs rdiff -u -r1.60 -r1.61 src/bin/sh/trap.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Home |
Main Index |
Thread Index |
Old Index