aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2023-10-27 22:03:08 +0000
committerRichard Henderson <richard.henderson@linaro.org>2023-10-30 13:40:35 -0700
commit02d9f5b6acfa494e756ed8a5b373412e4240afaf (patch)
treecded9faa304cb8842c42439b6c8f7866f449c068
parentfd9a38fd437c4c31705071c240f4be11394ca1f8 (diff)
downloadqemu-02d9f5b6acfa494e756ed8a5b373412e4240afaf.zip
qemu-02d9f5b6acfa494e756ed8a5b373412e4240afaf.tar.gz
qemu-02d9f5b6acfa494e756ed8a5b373412e4240afaf.tar.bz2
linux-user: Fix guest signal remapping after adjusting SIGABRT
The arithmetic within the loop was not adjusted properly after SIGRTMIN was stolen for the guest SIGABRT. The effect was that the guest libc could not send itself __SIGRTMIN to wake sleeping threads. Fixes: 38ee0a7dfb4b ("linux-user: Remap guest SIGABRT") Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1967 Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
-rw-r--r--linux-user/signal.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/linux-user/signal.c b/linux-user/signal.c
index 3b8efec..b35d1e5 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -536,11 +536,10 @@ static void signal_table_init(void)
host_to_target_signal_table[SIGABRT] = 0;
host_to_target_signal_table[hsig++] = TARGET_SIGABRT;
- for (; hsig <= SIGRTMAX; hsig++) {
- tsig = hsig - SIGRTMIN + TARGET_SIGRTMIN;
- if (tsig <= TARGET_NSIG) {
- host_to_target_signal_table[hsig] = tsig;
- }
+ for (tsig = TARGET_SIGRTMIN;
+ hsig <= SIGRTMAX && tsig <= TARGET_NSIG;
+ hsig++, tsig++) {
+ host_to_target_signal_table[hsig] = tsig;
}
/* Invert the mapping that has already been assigned. */