aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel
diff options
context:
space:
mode:
authorJon Medhurst <tixy@yxit.co.uk>2011-07-03 14:57:18 +0100
committerTixy <tixy@medhuaa1.miniserver.com>2011-07-13 17:32:47 +0000
commit6a0d1a1c5692d6192684fb7aa8f4d7f401f8dbab (patch)
tree3f0c36ecbce036b753f2c191c8907a79c3c9fd37 /arch/arm/kernel
parentARM: kprobes: Decode 32-bit Thumb branch instructions (diff)
downloadlinux-dev-6a0d1a1c5692d6192684fb7aa8f4d7f401f8dbab.tar.xz
linux-dev-6a0d1a1c5692d6192684fb7aa8f4d7f401f8dbab.zip
ARM: kprobes: Reject 32-bit Thumb coprocessor and SIMD instructions
The kernel doesn't currently support VFP or Neon code, and probing of code with CP15 operations is fraught with bad consequences. So we will just reject probing these instructions. Signed-off-by: Jon Medhurst <tixy@yxit.co.uk> Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org>
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r--arch/arm/kernel/kprobes-thumb.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/arm/kernel/kprobes-thumb.c b/arch/arm/kernel/kprobes-thumb.c
index 1677234000b2..6cc51b48762f 100644
--- a/arch/arm/kernel/kprobes-thumb.c
+++ b/arch/arm/kernel/kprobes-thumb.c
@@ -510,6 +510,12 @@ const union decode_item kprobe_decode_thumb32_table[] = {
DECODE_TABLE (0xfe000000, 0xea000000, t32_table_1110_101x),
/*
+ * Coprocessor instructions
+ * 1110 11xx xxxx xxxx xxxx xxxx xxxx xxxx
+ */
+ DECODE_REJECT (0xfc000000, 0xec000000),
+
+ /*
* Data-processing (modified immediate)
* 1111 0x0x xxxx xxxx 0xxx xxxx xxxx xxxx
*/
@@ -527,6 +533,16 @@ const union decode_item kprobe_decode_thumb32_table[] = {
*/
DECODE_TABLE (0xf8008000, 0xf0008000, t32_table_1111_0xxx___1),
+ /*
+ * Advanced SIMD element or structure load/store instructions
+ * 1111 1001 xxx0 xxxx xxxx xxxx xxxx xxxx
+ */
+ DECODE_REJECT (0xff100000, 0xf9000000),
+
+ /*
+ * Coprocessor instructions
+ * 1111 11xx xxxx xxxx xxxx xxxx xxxx xxxx
+ */
DECODE_END
};