* [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).