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. ** Changed in: qemu Status: New => Incomplete -- You received this bug notification because you are a member of qemu- devel-ml, which is subscribed to QEMU. https://bugs.launchpad.net/bugs/1903833 Title: User mode qemu-aarch: SIGGSEGV signal handler works wrong Status in QEMU: Incomplete 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://github.com/BorisUlasevich/qemu/commit/3063d9a64f8395185d65c6b6710d28ee92cd8be5 The issue can be reproduced on OpenJDK which reports SIGSEGV immediately after start. The small reproducer program is attached. To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1903833/+subscriptions