summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorNikolay Borisov <Nikolay.Borisov@arm.com>2014-05-08 16:54:26 +0200
committerRussell King <rmk+kernel@arm.linux.org.uk>2014-05-26 00:44:26 +0200
commit8203d5b628907ae6141e4eb52f9b48e0f1f46cd2 (patch)
tree8b635436986e4036ace52cb30299eac7b7bfe70f /arch
parentARM: 8051/1: put_user: fix possible data corruption in put_user (diff)
downloadlinux-8203d5b628907ae6141e4eb52f9b48e0f1f46cd2.tar.xz
linux-8203d5b628907ae6141e4eb52f9b48e0f1f46cd2.zip
ARM: 8052/1: unwind: Fix handling of "Pop r4-r[4+nnn],r14" opcode
The arm EABI states that unwind opcode 10100nnn means pop register r4-4[4+nnn],aditionally there is a similar unwind opcode: 10101nnn which means the same thing plus popping r14. Those two cases are handled by the unwind_exec_pop_r4_to_rN function which checks whether the 4th bit is set and does r14 popping. However, up until now it has been checking whether the 8th bit was set (mask & 0x80) instead of the 4th (mask & 0x8), a simple to make typo but this meant that we were always popping r14 even if we had the former opcode. This patch changes the mask so that the 2 unwind opcodes are being handled correctly. Signed-off-by: Nikolay Borisov <Nikolay.Borisov@arm.com> Reviewed-by: Anurag Aggarwal <anurag19aggarwal@gmail.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/kernel/unwind.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arm/kernel/unwind.c b/arch/arm/kernel/unwind.c
index 3c217694ebec..cb791ac6a003 100644
--- a/arch/arm/kernel/unwind.c
+++ b/arch/arm/kernel/unwind.c
@@ -285,7 +285,7 @@ static int unwind_exec_pop_r4_to_rN(struct unwind_ctrl_block *ctrl,
if (unwind_pop_register(ctrl, &vsp, reg))
return -URC_FAILURE;
- if (insn & 0x80)
+ if (insn & 0x8)
if (unwind_pop_register(ctrl, &vsp, 14))
return -URC_FAILURE;