diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2023-10-27 22:03:08 +0000 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2023-10-30 13:40:35 -0700 |
commit | 02d9f5b6acfa494e756ed8a5b373412e4240afaf (patch) | |
tree | cded9faa304cb8842c42439b6c8f7866f449c068 | |
parent | fd9a38fd437c4c31705071c240f4be11394ca1f8 (diff) | |
download | qemu-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.c | 9 |
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. */ |