diff options
Diffstat (limited to 'results/classifier/zero-shot-user-mode/output/instruction/834')
| -rw-r--r-- | results/classifier/zero-shot-user-mode/output/instruction/834 | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/results/classifier/zero-shot-user-mode/output/instruction/834 b/results/classifier/zero-shot-user-mode/output/instruction/834 deleted file mode 100644 index fc4f86cf..00000000 --- a/results/classifier/zero-shot-user-mode/output/instruction/834 +++ /dev/null @@ -1,65 +0,0 @@ -instruction: 0.445 -runtime: 0.288 -syscall: 0.267 - - - -linux-user: fails to deliver signals raised during pselect -Description of problem: -When run via qemu a program which blocks signals but unmasks them during `pselect` does not catch these signals when returning from `pselect`. - -Used as reference on expected behavior: [The new pselect() system call](https://lwn.net/Articles/176911/) -Steps to reproduce: -A minimal test case below mimics behavior as encountered in the test suite of `p11-kit` ([link](https://github.com/p11-glue/p11-kit)) (which attempts to catch `SIGTERM` in a similar way and results in lingering processes after running the test suite). - -```C -#include <stdio.h> -#include <unistd.h> -#include <signal.h> -#include <sys/select.h> - -static void handler(int sig) -{ - puts("SIGNAL"); -} - -int main(int argc, char *argv[]) -{ - struct sigaction sa; - - fd_set rfds; - sigset_t emptyset, blockset; - - sigemptyset (&blockset); - sigemptyset (&emptyset); - sigaddset (&blockset, SIGUSR1); - - sa.sa_handler = handler; - sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; - sigaction(SIGUSR1, &sa, NULL); - - sigprocmask (SIG_BLOCK, &blockset, NULL); - - FD_ZERO(&rfds); - - while(1) { - pselect(0, &rfds, NULL, NULL, NULL, &emptyset); - } - - return 0; -} -``` - -Running this without qemu should print _SIGNAL_ when sent `SIGUSR1`: - -``` -$ ./a.out & -[1] 1683587 -$ kill -USR1 %1 -$ SIGNAL -``` - -When run with `qemu-x86_64` however, it does not (also qemu's `-strace` confirms the signal isn't received whereas a strace of qemu shows it's in fact delivered). - -The pselect call itself _is_ interrupted, but the signal goes missing. |
