DynamoRIO / DynamoRIO/dynamorio

process-directed signals incorrectly delivered to threads blocking them

Open
#2,311 15 comments 0 reactions 0 assignees View on GitHub
Bug-AppFail help wanted OpSys-Linux
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.