All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Vivier <laurent@vivier.eu>
To: qemu-devel@nongnu.org
Cc: Richard Henderson <richard.henderson@linaro.org>,
	Laurent Vivier <laurent@vivier.eu>,
	David Hildenbrand <david@redhat.com>
Subject: [PULL 33/59] linux-user/s390x: Fix sigframe types
Date: Tue, 18 May 2021 07:31:05 +0200	[thread overview]
Message-ID: <20210518053131.87212-34-laurent@vivier.eu> (raw)
In-Reply-To: <20210518053131.87212-1-laurent@vivier.eu>

From: Richard Henderson <richard.henderson@linaro.org>

Noticed via gitlab clang-user job:

  TEST    signals on s390x
../linux-user/s390x/signal.c:258:9: runtime error: \
  1.84467e+19 is outside the range of representable values of \
  type 'unsigned long'

Which points to the fact that we were performing a double-to-uint64_t
conversion while storing the fp registers, instead of just copying
the data across.

Turns out there are several errors:

target_ulong is the size of the target register, whereas abi_ulong
is the target 'unsigned long' type.  Not a big deal here, since we
only support 64-bit s390x, but not correct either.

In target_sigcontext and target ucontext, we used a host pointer
instead of a target pointer, aka abi_ulong.

Fixing this allows the removal of a cast to __put_user.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: David Hildenbrand <david@redhat.com>
Message-Id: <20210428193408.233706-2-richard.henderson@linaro.org>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
 linux-user/s390x/signal.c | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/linux-user/s390x/signal.c b/linux-user/s390x/signal.c
index b68b44ae7e99..707fb603d72e 100644
--- a/linux-user/s390x/signal.c
+++ b/linux-user/s390x/signal.c
@@ -37,13 +37,14 @@
 
 typedef struct {
     target_psw_t psw;
-    target_ulong gprs[__NUM_GPRS];
-    unsigned int acrs[__NUM_ACRS];
+    abi_ulong gprs[__NUM_GPRS];
+    abi_uint acrs[__NUM_ACRS];
 } target_s390_regs_common;
 
 typedef struct {
-    unsigned int fpc;
-    double   fprs[__NUM_FPRS];
+    uint32_t fpc;
+    uint32_t pad;
+    uint64_t fprs[__NUM_FPRS];
 } target_s390_fp_regs;
 
 typedef struct {
@@ -51,22 +52,22 @@ typedef struct {
     target_s390_fp_regs     fpregs;
 } target_sigregs;
 
-struct target_sigcontext {
-    target_ulong   oldmask[_SIGCONTEXT_NSIG_WORDS];
-    target_sigregs *sregs;
-};
+typedef struct {
+    abi_ulong oldmask[_SIGCONTEXT_NSIG_WORDS];
+    abi_ulong sregs;
+} target_sigcontext;
 
 typedef struct {
     uint8_t callee_used_stack[__SIGNAL_FRAMESIZE];
-    struct target_sigcontext sc;
+    target_sigcontext sc;
     target_sigregs sregs;
     int signo;
     uint8_t retcode[S390_SYSCALL_SIZE];
 } sigframe;
 
 struct target_ucontext {
-    target_ulong tuc_flags;
-    struct target_ucontext *tuc_link;
+    abi_ulong tuc_flags;
+    abi_ulong tuc_link;
     target_stack_t tuc_stack;
     target_sigregs tuc_mcontext;
     target_sigset_t tuc_sigmask;   /* mask last for extensibility */
@@ -143,8 +144,7 @@ void setup_frame(int sig, struct target_sigaction *ka,
 
     save_sigregs(env, &frame->sregs);
 
-    __put_user((abi_ulong)(unsigned long)&frame->sregs,
-               (abi_ulong *)&frame->sc.sregs);
+    __put_user((abi_ulong)(unsigned long)&frame->sregs, &frame->sc.sregs);
 
     /* Set up to return from userspace.  If provided, use a stub
        already in userspace.  */
-- 
2.31.1



  parent reply	other threads:[~2021-05-18  6:03 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-18  5:30 [PULL 00/59] Linux user for 6.1 patches Laurent Vivier
2021-05-18  5:30 ` [PULL 01/59] linux-user: Remove dead code Laurent Vivier
2021-05-18  5:30 ` [PULL 02/59] linux-user: strace now handles unshare syscall args correctly Laurent Vivier
2021-05-18  5:30 ` [PULL 03/59] linux-user/arm: Split out emulate_arm_fpa11 Laurent Vivier
2021-05-18  5:30 ` [PULL 04/59] linux-user/arm: Do not emulate fpa11 in thumb mode Laurent Vivier
2021-05-18  5:30 ` [PULL 05/59] linux-user/arm: Do not fill in si_code for fpa11 exceptions Laurent Vivier
2021-05-18  5:30 ` [PULL 06/59] linux-user/arm: Simplify accumulating and raising " Laurent Vivier
2021-05-18  5:30 ` [PULL 07/59] linux-user: Add strace support for printing arguments of llseek Laurent Vivier
2021-05-18  5:30 ` [PULL 08/59] linux-user: Split out target_restore_altstack Laurent Vivier
2021-05-18  5:30 ` [PULL 09/59] linux-user: Use target_restore_altstack in all sigreturn Laurent Vivier
2021-05-18  5:30 ` [PULL 10/59] linux-user: Pass CPUArchState to do_sigaltstack Laurent Vivier
2021-05-18  5:30 ` [PULL 11/59] linux-user: Pass CPUArchState to target_restore_altstack Laurent Vivier
2021-05-18  5:30 ` [PULL 12/59] linux-user/sparc: Include TARGET_STACK_BIAS in get_sp_from_cpustate Laurent Vivier
2021-05-18  5:30 ` [PULL 13/59] linux-user/sparc: Clean up init_thread Laurent Vivier
2021-05-18  5:30 ` [PULL 14/59] linux-user/sparc: Merge sparc64 target_syscall.h Laurent Vivier
2021-05-18  5:30 ` [PULL 15/59] linux-user/sparc: Merge sparc64 target_elf.h Laurent Vivier
2021-05-18  5:30 ` [PULL 16/59] linux-user/sparc: Merge sparc64 target_structs.h Laurent Vivier
2021-05-18  5:30 ` [PULL 17/59] linux-user/sparc: Merge sparc64 termbits.h Laurent Vivier
2021-05-18  5:30 ` [PULL 18/59] linux-user/sparc: Merge sparc64/ into sparc/ Laurent Vivier
2021-05-18  5:30 ` [PULL 19/59] linux-user/sparc: Remove target_sigcontext as unused Laurent Vivier
2021-05-18  5:30 ` [PULL 20/59] linux-user/sparc: Remove target_rt_signal_frame " Laurent Vivier
2021-05-18  5:30 ` [PULL 21/59] linux-user/sparc: Fix the stackframe structure Laurent Vivier
2021-05-18  5:30 ` [PULL 22/59] linux-user/sparc: Use target_pt_regs Laurent Vivier
2021-05-18  5:30 ` [PULL 23/59] linux-user/sparc: Split out save_reg_win Laurent Vivier
2021-05-18  5:30 ` [PULL 24/59] linux-user/sparc: Clean up get_sigframe Laurent Vivier
2021-05-18  5:30 ` [PULL 25/59] linux-user/sparc: Save and restore fpu in signal frame Laurent Vivier
2021-05-18  5:30 ` [PULL 26/59] linux-user/sparc: Add rwin_save to " Laurent Vivier
2021-05-18  5:30 ` [PULL 27/59] linux-user/sparc: Clean up setup_frame Laurent Vivier
2021-05-18  5:31 ` [PULL 28/59] linux-user/sparc: Minor corrections to do_sigreturn Laurent Vivier
2021-05-18  5:31 ` [PULL 29/59] linux-user/sparc: Add 64-bit support to fpu save/restore Laurent Vivier
2021-05-18  5:31 ` [PULL 30/59] linux-user/sparc: Implement sparc32 rt signals Laurent Vivier
2021-05-18  5:31 ` [PULL 31/59] linux-user/sparc: Implement sparc64 " Laurent Vivier
2021-05-18  5:31 ` [PULL 32/59] tests/tcg/sparc64: Re-enable linux-test Laurent Vivier
2021-05-18  5:31 ` Laurent Vivier [this message]
2021-05-18  5:31 ` [PULL 34/59] linux-user/s390x: Use uint16_t for signal retcode Laurent Vivier
2021-05-18  5:31 ` [PULL 35/59] linux-user/s390x: Remove PSW_ADDR_AMODE Laurent Vivier
2021-05-18  5:31 ` [PULL 36/59] linux-user/s390x: Remove restore_sigregs return value Laurent Vivier
2021-05-18  5:31 ` [PULL 37/59] linux-user/s390x: Fix trace in restore_regs Laurent Vivier
2021-05-18  5:31 ` [PULL 38/59] linux-user/s390x: Fix sigcontext sregs value Laurent Vivier
2021-05-18  5:31 ` [PULL 39/59] linux-user/s390x: Use tswap_sigset in setup_rt_frame Laurent Vivier
2021-05-18  5:31 ` [PULL 40/59] linux-user/s390x: Tidy save_sigregs Laurent Vivier
2021-05-18  5:31 ` [PULL 41/59] linux-user/s390x: Clean up single-use gotos in signal.c Laurent Vivier
2021-05-18  5:31 ` [PULL 42/59] linux-user/s390x: Set psw.mask properly for the signal handler Laurent Vivier
2021-05-18  5:31 ` [PULL 43/59] linux-user/s390x: Add stub sigframe argument for last_break Laurent Vivier
2021-05-18  5:31 ` [PULL 44/59] linux-user/s390x: Fix frame_addr corruption in setup_frame Laurent Vivier
2021-05-18  5:31 ` [PULL 45/59] linux-user/s390x: Add build asserts for sigset sizes Laurent Vivier
2021-05-18  5:31 ` [PULL 46/59] linux-user/s390x: Clean up signal.c Laurent Vivier
2021-05-18  5:31 ` [PULL 47/59] linux-user/s390x: Handle vector regs in signal stack Laurent Vivier
2021-05-18  5:31 ` [PULL 48/59] linux-user: Add copy_file_range to strace.list Laurent Vivier
2021-05-18  5:31 ` [PULL 49/59] linux-user: Fix erroneous conversion in copy_file_range Laurent Vivier
2021-05-18  5:31 ` [PULL 50/59] linux-user: use GDateTime for formatting timestamp for core file Laurent Vivier
2021-05-18  5:31 ` [PULL 51/59] linux-user/alpha: Fix rt sigframe return Laurent Vivier
2021-05-18  5:31 ` [PULL 52/59] linux-user/alpha: Rename the sigaction restorer field Laurent Vivier
2021-05-18  5:31 ` [PULL 53/59] linux-user: Pass ka_restorer to do_sigaction Laurent Vivier
2021-05-18  5:31 ` [PULL 54/59] linux-user: Honor TARGET_ARCH_HAS_SA_RESTORER in do_syscall Laurent Vivier
2021-05-18  5:31 ` [PULL 55/59] linux-user/alpha: Define TARGET_ARCH_HAS_KA_RESTORER Laurent Vivier
2021-05-18  5:31 ` [PULL 56/59] linux-user/alpha: Share code for TARGET_NR_sigaction Laurent Vivier
2021-05-18  5:31 ` [PULL 57/59] linux-user: Tidy TARGET_NR_rt_sigaction Laurent Vivier
2021-05-18  5:31 ` [PULL 58/59] linux-user/elfload: fix filling psinfo->pr_psargs Laurent Vivier
2021-05-18  5:31 ` [PULL 59/59] linux-user/elfload: add s390x core dumping support Laurent Vivier
2021-05-18 20:18 ` [PULL 00/59] Linux user for 6.1 patches Peter Maydell
2021-05-20 13:17 ` Philippe Mathieu-Daudé
  -- strict thread matches above, loose matches on Subject: below --
2021-05-17 18:13 Laurent Vivier
2021-05-17 18:13 ` [PULL 33/59] linux-user/s390x: Fix sigframe types Laurent Vivier

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=20210518053131.87212-34-laurent@vivier.eu \
    --to=laurent@vivier.eu \
    --cc=david@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.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.