[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3] linux-user/s390x: Use the guest pointer for the sigreturn
From: |
Laurent Vivier |
Subject: |
Re: [PATCH v3] linux-user/s390x: Use the guest pointer for the sigreturn stub |
Date: |
Thu, 25 Mar 2021 20:55:48 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 |
Le 24/03/2021 à 19:51, Andreas Krebbel a écrit :
> When setting up the pointer for the sigreturn stub in the return
> address register (r14) we currently use the host frame address instead
> of the guest frame address.
>
> Note: This only caused problems if Qemu has been built with
> --disable-pie (as it is in distros nowadays). Otherwise guest_base
> defaults to 0 hiding the actual problem.
>
> Signed-off-by: Andreas Krebbel <krebbel@linux.ibm.com>
> ---
> linux-user/s390x/signal.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/linux-user/s390x/signal.c b/linux-user/s390x/signal.c
> index ecfa2a14a9..7107c5fb53 100644
> --- a/linux-user/s390x/signal.c
> +++ b/linux-user/s390x/signal.c
> @@ -211,9 +211,10 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
> /* Set up to return from userspace. If provided, use a stub
> already in userspace. */
> if (ka->sa_flags & TARGET_SA_RESTORER) {
> - env->regs[14] = (unsigned long) ka->sa_restorer | PSW_ADDR_AMODE;
> + env->regs[14] = ka->sa_restorer | PSW_ADDR_AMODE;
> } else {
> - env->regs[14] = (unsigned long) frame->retcode | PSW_ADDR_AMODE;
> + env->regs[14] = (frame_addr + offsetof(typeof(*frame), retcode))
> + | PSW_ADDR_AMODE;
> __put_user(S390_SYSCALL_OPCODE | TARGET_NR_rt_sigreturn,
> (uint16_t *)(frame->retcode));
> }
>
Applied to my linux-user-for-6.0 branch
Thanks,
Laurent