DynamoRIO / DynamoRIO/dynamorio
HANG: queued signals not delivered when calling sigsuspend
- Dominant language
- C
- Stars
- 3.2k
- Forks
- 629
- Avg merge
- 2d 15h
- Merged PRs (30d)
- 31
Description
DynamoRIO 4afa0bd0d3 on AArch64 (note, this is on a different system from the one in #2356, DR was built without that workaround). I have not tested this on other architectures.
Steps to reproduce (in a single threaded application):
* register a handler for a signal
* mask that signal
* send that signal to the application
* call `sigsuspend()` with a mask which unblocks the signal
The expected behaviour is that the signal will be delivered to the application when calling sigsuspend(). However, under DynamoRIO, execution hangs in the syscall. If we send the same signal to the application again at that point, then both instances are delivered (so the first one isn't lost).
[This test](https://github.com/beehive-lab/mambo/blob/e576a68d9854a6b75e175986e3426a91bc38450a/test/signals.c#L115) demonstrates the issue (you'll have to comment out a few things to build it without the external dependencies).
Edit: this is also happening on AArch32.
Contributor guide
Assessment
This issue has not been assessed yet.