Page MenuHomeFreeBSD

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

Authored by badger on Mar 5 2017, 1:57 AM.

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
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

badger retitled this revision from to don't stop in issignal() if P_SINGLE_EXIT is set.Mar 5 2017, 1:57 AM
badger updated this object.
badger edited the test plan for this revision. (Show Details)
badger added a reviewer: kib.
badger updated this revision to Diff 25987.
kib edited edge metadata.Mar 5 2017, 11:26 AM
kib accepted this revision.
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.