All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, laurent@vivier.eu
Subject: [PATCH v2 03/30] linux-user/arm: Use force_sig() to deliver fpa11 emulation SIGFPE
Date: Sat, 21 Aug 2021 20:55:10 -0700	[thread overview]
Message-ID: <20210822035537.283193-4-richard.henderson@linaro.org> (raw)
In-Reply-To: <20210822035537.283193-1-richard.henderson@linaro.org>

From: Peter Maydell <peter.maydell@linaro.org>

In the Arm target code, when the fpa11 emulation code tells us we
need to send the guest a SIGFPE, we do this with queue_signal(), but
we are using the wrong si_type, and we aren't setting the _sifields
union members corresponding to either the si_type we are using or the
si_type we should be using.

As the existing comment notes, the kernel code for this calls the old
send_sig() function to deliver the signal.  This eventually results
in the kernel's signal handling code fabricating a siginfo_t with a
SI_KERNEL code and a zero pid and uid.  For QEMU this means we need
to use QEMU_SI_KILL.  We already have a function for that:
force_sig() sets up the whole target_siginfo_t the way we need it.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-Id: <20210813131809.28655-4-peter.maydell@linaro.org>
[rth: Include signal-common.h]
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/arm/cpu_loop.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c
index 007752f5b7..b8ece169f9 100644
--- a/linux-user/arm/cpu_loop.c
+++ b/linux-user/arm/cpu_loop.c
@@ -22,6 +22,7 @@
 #include "qemu.h"
 #include "elf.h"
 #include "cpu_loop-common.h"
+#include "signal-common.h"
 #include "semihosting/common-semi.h"
 
 #define get_user_code_u32(x, gaddr, env)                \
@@ -266,16 +267,13 @@ static bool emulate_arm_fpa11(CPUARMState *env, uint32_t opcode)
     ts->fpa.fpsr |= raise & ~enabled;
 
     if (raise & enabled) {
-        target_siginfo_t info = { };
-
         /*
          * The kernel's nwfpe emulator does not pass a real si_code.
-         * It merely uses send_sig(SIGFPE, current, 1).
+         * It merely uses send_sig(SIGFPE, current, 1), which results in
+         * __send_signal() filling out SI_KERNEL with pid and uid 0 (under
+         * the "SEND_SIG_PRIV" case). That's what our force_sig() does.
          */
-        info.si_signo = TARGET_SIGFPE;
-        info.si_code = TARGET_SI_KERNEL;
-
-        queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
+        force_sig(TARGET_SIGFPE);
     } else {
         env->regs[15] += 4;
     }
-- 
2.25.1



  parent reply	other threads:[~2021-08-22  3:59 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-22  3:55 [PATCH v2 00/30] linux-user: Clean up siginfo_t handling Richard Henderson
2021-08-22  3:55 ` [PATCH v2 01/30] linux-user/aarch64: Set siginfo_t addr field for SIGTRAP signals Richard Henderson
2021-08-22  3:55 ` [PATCH v2 02/30] linux-user/arm: " Richard Henderson
2021-08-22  3:55 ` Richard Henderson [this message]
2021-08-22  3:55 ` [PATCH v2 04/30] linux-user: Zero out target_siginfo_t in force_sig() Richard Henderson
2021-08-24 16:32   ` Philippe Mathieu-Daudé
2021-08-22  3:55 ` [PATCH v2 05/30] linux-user: Provide new force_sig_fault() function Richard Henderson
2021-08-24 16:36   ` Philippe Mathieu-Daudé
2021-08-22  3:55 ` [PATCH v2 06/30] linux-user: Provide new force_sigsegv_for_addr() function Richard Henderson
2021-08-24 16:20   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 07/30] linux-user/arm: Use force_sig_fault() Richard Henderson
2021-08-24 16:38   ` Philippe Mathieu-Daudé
2021-08-22  3:55 ` [PATCH v2 08/30] linux-user/aarch64: " Richard Henderson
2021-08-24 16:39   ` Philippe Mathieu-Daudé
2021-08-22  3:55 ` [PATCH v2 09/30] linux-user/alpha: Set TRAP_UNK for bugchk and unknown gentrap Richard Henderson
2021-08-24 16:22   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 10/30] linux-user/alpha: Set FPE_FLTUNK for gentrap ROPRAND Richard Henderson
2021-08-24 16:22   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 11/30] linux-user/alpha: Use force_sig_fault, force_sigsegv_code Richard Henderson
2021-08-24 16:24   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 12/30] linux-user/cris: " Richard Henderson
2021-08-24 16:27   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 13/30] linux-user/hexagon: Use force_sigsegv_code Richard Henderson
2021-08-24 16:29   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 14/30] linux-user/hppa: Use force_sig_fault, force_sigsegv_for_addr Richard Henderson
2021-08-24 16:32   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 15/30] linux-user/hppa: Use the proper si_code for PRIV_OPR, PRIV_REG, OVERFLOW Richard Henderson
2021-08-24 16:34   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 16/30] linux-user/hppa: Set FPE_CONDTRAP for COND Richard Henderson
2021-08-24 16:37   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 17/30] linux-user/i386: Split out maybe_handle_vm86_trap Richard Henderson
2021-08-24 16:38   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 18/30] linux-user/i386: Use force_sig, force_sig_fault, force_sigsegv_for_addr Richard Henderson
2021-08-24 16:40   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 19/30] linux-user/m68k: Use " Richard Henderson
2021-08-24 16:41   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 20/30] linux-user/microblaze: " Richard Henderson
2021-08-24 16:42   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 21/30] linux-user/microblaze: Fix SIGFPE si_codes Richard Henderson
2021-08-24 16:55   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 22/30] linux-user/mips: Improve do_break Richard Henderson
2021-08-24 16:46   ` Philippe Mathieu-Daudé
2021-08-22  3:55 ` [PATCH v2 23/30] linux-user/mips: Use force_sig_fault, force_sigsegv_for_addr Richard Henderson
2021-08-24 17:04   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 24/30] linux-user/openrisc: " Richard Henderson
2021-08-24 17:17   ` Peter Maydell
2021-09-19 17:49     ` Richard Henderson
2021-09-21 20:26       ` Stafford Horne
2021-08-22  3:55 ` [PATCH v2 25/30] linux-user/ppc: " Richard Henderson
2021-08-24 17:19   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 26/30] linux-user/riscv: " Richard Henderson
2021-08-24 17:23   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 27/30] linux-user/s390x: " Richard Henderson
2021-08-24 17:23   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 28/30] linux-user/sh4: " Richard Henderson
2021-08-24 17:24   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 29/30] linux-user/sparc: " Richard Henderson
2021-08-24 17:25   ` Peter Maydell
2021-08-22  3:55 ` [PATCH v2 30/30] linux-user/xtensa: " Richard Henderson
2021-08-24 17:26   ` Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210822035537.283193-4-richard.henderson@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=laurent@vivier.eu \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.