Skip to content

Commit

Permalink
linux-user: Fix guest signal remapping after adjusting SIGABRT
Browse files Browse the repository at this point in the history
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: 38ee0a7 ("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>
  • Loading branch information
rth7680 committed Oct 30, 2023
1 parent fd9a38f commit 02d9f5b
Showing 1 changed file with 4 additions and 5 deletions.
9 changes: 4 additions & 5 deletions linux-user/signal.c
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand Down

0 comments on commit 02d9f5b

Please sign in to comment.