summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDima Zavin <dima@android.com>2010-07-29 16:42:32 -0700
committerDima Zavin <dima@android.com>2010-08-10 14:48:48 -0700
commit049a7464f34e2d8c73646d2571f1935f19ac694c (patch)
tree48458193a277045b4013b284c39d57277988a52f
parent750bc63a1a0ade99ed97cb5beb026ca944dc5c56 (diff)
downloadcommon-archive/android-2.6.32.tar.gz
ARM: only allow 26-bit user mode on CPUs that support itarchive/android-2.6.32
Change-Id: Ia79b3872d395ffe796dd9d564ae08f7c0d5bc49e Reviewed-by: Arve Hjønnevåg <arve@android.com> Signed-off-by: Dima Zavin <dima@android.com>
-rw-r--r--arch/arm/include/asm/ptrace.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/arm/include/asm/ptrace.h b/arch/arm/include/asm/ptrace.h
index bbecccda76d0..6674c42a1a27 100644
--- a/arch/arm/include/asm/ptrace.h
+++ b/arch/arm/include/asm/ptrace.h
@@ -150,7 +150,11 @@ struct pt_regs {
*/
static inline int valid_user_regs(struct pt_regs *regs)
{
- if (user_mode(regs) && (regs->ARM_cpsr & PSR_I_BIT) == 0) {
+ long mode = regs->ARM_cpsr & MODE_MASK;
+
+ if (((mode == USR_MODE) ||
+ ((elf_hwcap & HWCAP_26BIT) && (mode == USR26_MODE))) &&
+ (regs->ARM_cpsr & PSR_I_BIT) == 0) {
regs->ARM_cpsr &= ~(PSR_F_BIT | PSR_A_BIT);
return 1;
}