User mode qemu-aarch: SIGGSEGV signal handler works wrong
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
QEMU |
Expired
|
Undecided
|
Unassigned |
Bug Description
I have a user mode qemu-aarch issue. Program with SIGSEGV signal handler works wrong under qemu-aarch:
once the progam handles the SEGV signal, qemu marks the program's page protected, and signal handler gets SEGV on each subsequent memory access instruction within a program.
The issue is reproduced on WSL Ubuntu 20.04 under Windows 10, qemu-aarch64 version 5.1.50
The issue is also reproducible on the latest upstream qemu-aarch build.
The following workaround disables mprotect call and fixes the issue: https:/
The issue can be reproduced on OpenJDK which reports SIGSEGV immediately after start. The small reproducer program is attached.
The patch is most definitely wrong. The page protection
is required to implement self-modifying code, of which a
signal trampoline is a subset.
Moreover, your test case works for me using both
x86_64-linux and aarch64-linux as hosts.
There may be a bug, but I suspect it to be within WSL.
I have no way to test that one way or another.