Page MenuHomeFreeBSD

don't stop in issignal() if P_SINGLE_EXIT is set
ClosedPublic

Authored by badger on Mar 5 2017, 1:57 AM.
Tags
None
Referenced Files
F83578234: D9890.id.diff
Sun, May 12, 3:42 AM
F83578024: D9890.diff
Sun, May 12, 3:38 AM
Unknown Object (File)
Wed, May 8, 8:37 PM
Unknown Object (File)
Fri, May 3, 5:12 AM
Unknown Object (File)
Thu, Apr 25, 6:44 PM
Unknown Object (File)
Wed, Apr 24, 10:20 PM
Unknown Object (File)
Wed, Apr 24, 6:57 PM
Unknown Object (File)
Mar 30 2024, 1:13 AM
Subscribers

Details

Summary

Suppose a traced process is stopped in ptracestop() due to receipt of a
SIGSTOP signal, and is awaiting orders from the tracing process on how
to handle the signal. Before sending any such orders, the tracing
process exits. This should kill the traced process. But suppose a second
thread handles the SIGKILL and proceeds to exit1(), calling
thread_single(). The first thread will now awaken and will have a chance
to check once more if it should go to sleep due to the SIGSTOP. It must
not sleep after P_SINGLE_EXIT has been set; this would prevent the
SIGKILL from taking effect, leaving a stopped orphan behind after the
tracing process dies.

Also add new tests for this condition.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

badger retitled this revision from to don't stop in issignal() if P_SINGLE_EXIT is set.
badger updated this object.
badger edited the test plan for this revision. (Show Details)
badger added a reviewer: kib.
kib edited edge metadata.
This revision is now accepted and ready to land.Mar 5 2017, 11:26 AM
This revision was automatically updated to reflect the committed changes.