qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/1 v2] Fix do_rt_sigreturn on m68k linux userspace emulation
@ 2015-12-12 10:13 Michael Karcher
  2015-12-12 10:13 ` [Qemu-devel] [PATCH 1/1 " Michael Karcher
  0 siblings, 1 reply; 3+ messages in thread
From: Michael Karcher @ 2015-12-12 10:13 UTC (permalink / raw)
  To: Riku Voipio, Laurent Vivier, qemu-devel; +Cc: glaubitz

Changelog:
  v2: Avoid unneeded copy, use correct endianness.

Michael Karcher (1):
  Fix do_rt_sigreturn on m68k linux userspace emulation

 linux-user/signal.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

-- 
2.1.4

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Qemu-devel] [PATCH 1/1 v2] Fix do_rt_sigreturn on m68k linux userspace emulation
  2015-12-12 10:13 [Qemu-devel] [PATCH 0/1 v2] Fix do_rt_sigreturn on m68k linux userspace emulation Michael Karcher
@ 2015-12-12 10:13 ` Michael Karcher
  2015-12-12 10:36   ` Laurent Vivier
  0 siblings, 1 reply; 3+ messages in thread
From: Michael Karcher @ 2015-12-12 10:13 UTC (permalink / raw)
  To: Riku Voipio, Laurent Vivier, qemu-devel; +Cc: glaubitz

do_rt_sigreturn uses an uninitialised local variable instead of fetching
the old signal mask directly from the signal frame when restoring the mask,
so the signal mask is undefined after do_rt_sigreturn. As the signal
frame data is in target-endian order, target_to_host_sigset instead of
target_to_host_sigset_internal is required.

do_sigreturn is correct in using target_to_host_sigset_internal, because
get_user already did the endianness conversion.

Signed-off-by: Michael Karcher <karcher@physik.fu-berlin.de>
---
 linux-user/signal.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/linux-user/signal.c b/linux-user/signal.c
index e03ed60..13f9142 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -5258,14 +5258,13 @@ long do_rt_sigreturn(CPUM68KState *env)
 {
     struct target_rt_sigframe *frame;
     abi_ulong frame_addr = env->aregs[7] - 4;
-    target_sigset_t target_set;
     sigset_t set;
     int d0;
 
     if (!lock_user_struct(VERIFY_READ, frame, frame_addr, 1))
         goto badframe;
 
-    target_to_host_sigset_internal(&set, &target_set);
+    target_to_host_sigset(&set, &frame->uc.tuc_sigmask);
     do_sigprocmask(SIG_SETMASK, &set, NULL);
 
     /* restore registers */
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH 1/1 v2] Fix do_rt_sigreturn on m68k linux userspace emulation
  2015-12-12 10:13 ` [Qemu-devel] [PATCH 1/1 " Michael Karcher
@ 2015-12-12 10:36   ` Laurent Vivier
  0 siblings, 0 replies; 3+ messages in thread
From: Laurent Vivier @ 2015-12-12 10:36 UTC (permalink / raw)
  To: Michael Karcher, Riku Voipio, qemu-devel; +Cc: glaubitz



Le 12/12/2015 11:13, Michael Karcher a écrit :
> do_rt_sigreturn uses an uninitialised local variable instead of fetching
> the old signal mask directly from the signal frame when restoring the mask,
> so the signal mask is undefined after do_rt_sigreturn. As the signal
> frame data is in target-endian order, target_to_host_sigset instead of
> target_to_host_sigset_internal is required.
> 
> do_sigreturn is correct in using target_to_host_sigset_internal, because
> get_user already did the endianness conversion.
> 
> Signed-off-by: Michael Karcher <karcher@physik.fu-berlin.de>
> ---
>  linux-user/signal.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/linux-user/signal.c b/linux-user/signal.c
> index e03ed60..13f9142 100644
> --- a/linux-user/signal.c
> +++ b/linux-user/signal.c
> @@ -5258,14 +5258,13 @@ long do_rt_sigreturn(CPUM68KState *env)
>  {
>      struct target_rt_sigframe *frame;
>      abi_ulong frame_addr = env->aregs[7] - 4;
> -    target_sigset_t target_set;
>      sigset_t set;
>      int d0;
>  
>      if (!lock_user_struct(VERIFY_READ, frame, frame_addr, 1))
>          goto badframe;
>  
> -    target_to_host_sigset_internal(&set, &target_set);
> +    target_to_host_sigset(&set, &frame->uc.tuc_sigmask);
>      do_sigprocmask(SIG_SETMASK, &set, NULL);
>  
>      /* restore registers */
> 

Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Tested-by: Laurent Vivier <laurent@vivier.eu>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-12-12 10:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-12 10:13 [Qemu-devel] [PATCH 0/1 v2] Fix do_rt_sigreturn on m68k linux userspace emulation Michael Karcher
2015-12-12 10:13 ` [Qemu-devel] [PATCH 1/1 " Michael Karcher
2015-12-12 10:36   ` Laurent Vivier

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).