DynamoRIO / DynamoRIO/dynamorio

HANG: queued signals not delivered when calling sigsuspend

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

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.