DynamoRIO / DynamoRIO/dynamorio
process-directed signals incorrectly delivered to threads blocking them
- Dominant language
- C
- Stars
- 3.2k
- Forks
- 629
- Avg merge
- 2d 15h
- Merged PRs (30d)
- 31
Description
DR by default intercepts all signals and keeps them all unblocked in all
threads. It then emulates the kernel upon receipt of a signal, deciding
whether to deliver it or queue it as a pending signal, based on the
receiving thread's mask. However, for process-directed signals, delivery
is supposed to only consider those threads that have the signal unblocked.
Since DR will not deliver a signal to a different thread from the one that
received it, DR fails to properly emulate the kernel.
To handle all scenarios, including clients using alarm signals, we can't
rely on installing the app's mask and must emulate the kernel. We'll have
to examine other threads and deliver the signal to one of them. This may
not be simple to do efficiently yet race-free.
Contributor guide
Assessment
This issue has not been assessed yet.