| From 8c0c108fb336b96fdcddf0df09369e48ba97395e Mon Sep 17 00:00:00 2001 |
| From: Russell King <rmk+kernel@arm.linux.org.uk> |
| Date: Sun, 20 Feb 2011 12:22:52 +0000 |
| Subject: [PATCH] ARM: Ensure predictable endian state on signal handler entry |
| |
| commit 53399053eb505cf541b2405bd9d9bca5ecfb96fb upstream. |
| |
| Ensure a predictable endian state when entering signal handlers. This |
| avoids programs which use SETEND to momentarily switch their endian |
| state from having their signal handlers entered with an unpredictable |
| endian state. |
| |
| Acked-by: Dave Martin <dave.martin@linaro.org> |
| Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c |
| index 907d5a6..abaf844 100644 |
| --- a/arch/arm/kernel/signal.c |
| +++ b/arch/arm/kernel/signal.c |
| @@ -474,7 +474,9 @@ setup_return(struct pt_regs *regs, struct k_sigaction *ka, |
| unsigned long handler = (unsigned long)ka->sa.sa_handler; |
| unsigned long retcode; |
| int thumb = 0; |
| - unsigned long cpsr = regs->ARM_cpsr & ~PSR_f; |
| + unsigned long cpsr = regs->ARM_cpsr & ~(PSR_f | PSR_E_BIT); |
| + |
| + cpsr |= PSR_ENDSTATE; |
| |
| /* |
| * Maybe we need to deliver a 32-bit signal to a 26-bit task. |
| -- |
| 1.7.4.4 |
| |