From: Martin Schwidefsky Date: Tue, 27 Dec 2011 10:27:30 +0000 (+0100) Subject: [S390] return address of compat signals X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=207a05499bf11216ac96f76b38be728f4ee49304;p=mv-sheeva.git [S390] return address of compat signals A 31-bit kernel always sets the high order bit in the return address for a signal handler. git commit d4e81b35b882d96f "[S390] allow all addressing modes" makes sure that the high order bit is set in the signal return address for standard signals of a 31-bit compat process but fails to do the same for real-time signals. To make things consistent the bit needs to be set by setup_rt_frame32 as well. Signed-off-by: Martin Schwidefsky --- diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c index 60c268b16f9..6fe78c2f95d 100644 --- a/arch/s390/kernel/compat_signal.c +++ b/arch/s390/kernel/compat_signal.c @@ -548,9 +548,9 @@ static int setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info, /* Set up to return from userspace. If provided, use a stub already in userspace. */ if (ka->sa.sa_flags & SA_RESTORER) { - regs->gprs[14] = (__u64) ka->sa.sa_restorer; + regs->gprs[14] = (__u64) ka->sa.sa_restorer | PSW32_ADDR_AMODE; } else { - regs->gprs[14] = (__u64) frame->retcode; + regs->gprs[14] = (__u64) frame->retcode | PSW32_ADDR_AMODE; err |= __put_user(S390_SYSCALL_OPCODE | __NR_rt_sigreturn, (u16 __force __user *)(frame->retcode)); }