]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Apr 2021 12:23:58 +0000 (14:23 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Apr 2021 12:23:58 +0000 (14:23 +0200)
added patches:
arm-9071-1-uprobes-don-t-hook-on-thumb-instructions.patch

queue-4.14/arm-9071-1-uprobes-don-t-hook-on-thumb-instructions.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/arm-9071-1-uprobes-don-t-hook-on-thumb-instructions.patch b/queue-4.14/arm-9071-1-uprobes-don-t-hook-on-thumb-instructions.patch
new file mode 100644 (file)
index 0000000..32369fe
--- /dev/null
@@ -0,0 +1,48 @@
+From d2f7eca60b29006285d57c7035539e33300e89e5 Mon Sep 17 00:00:00 2001
+From: Fredrik Strupe <fredrik@strupe.net>
+Date: Mon, 5 Apr 2021 21:52:05 +0100
+Subject: ARM: 9071/1: uprobes: Don't hook on thumb instructions
+
+From: Fredrik Strupe <fredrik@strupe.net>
+
+commit d2f7eca60b29006285d57c7035539e33300e89e5 upstream.
+
+Since uprobes is not supported for thumb, check that the thumb bit is
+not set when matching the uprobes instruction hooks.
+
+The Arm UDF instructions used for uprobes triggering
+(UPROBE_SWBP_ARM_INSN and UPROBE_SS_ARM_INSN) coincidentally share the
+same encoding as a pair of unallocated 32-bit thumb instructions (not
+UDF) when the condition code is 0b1111 (0xf). This in effect makes it
+possible to trigger the uprobes functionality from thumb, and at that
+using two unallocated instructions which are not permanently undefined.
+
+Signed-off-by: Fredrik Strupe <fredrik@strupe.net>
+Cc: stable@vger.kernel.org
+Fixes: c7edc9e326d5 ("ARM: add uprobes support")
+Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm/probes/uprobes/core.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/arch/arm/probes/uprobes/core.c
++++ b/arch/arm/probes/uprobes/core.c
+@@ -207,7 +207,7 @@ unsigned long uprobe_get_swbp_addr(struc
+ static struct undef_hook uprobes_arm_break_hook = {
+       .instr_mask     = 0x0fffffff,
+       .instr_val      = (UPROBE_SWBP_ARM_INSN & 0x0fffffff),
+-      .cpsr_mask      = MODE_MASK,
++      .cpsr_mask      = (PSR_T_BIT | MODE_MASK),
+       .cpsr_val       = USR_MODE,
+       .fn             = uprobe_trap_handler,
+ };
+@@ -215,7 +215,7 @@ static struct undef_hook uprobes_arm_bre
+ static struct undef_hook uprobes_arm_ss_hook = {
+       .instr_mask     = 0x0fffffff,
+       .instr_val      = (UPROBE_SS_ARM_INSN & 0x0fffffff),
+-      .cpsr_mask      = MODE_MASK,
++      .cpsr_mask      = (PSR_T_BIT | MODE_MASK),
+       .cpsr_val       = USR_MODE,
+       .fn             = uprobe_trap_handler,
+ };
index 61b2aa1a77276fb1cc7a38f1ba9a4a5a3a0c30f3..c524cbf5320c6e6beaaaf8262e3f3e7b3aae3aeb 100644 (file)
@@ -33,3 +33,4 @@ ibmvnic-avoid-calling-napi_disable-twice.patch
 ibmvnic-remove-duplicate-napi_schedule-call-in-do_reset-function.patch
 ibmvnic-remove-duplicate-napi_schedule-call-in-open-function.patch
 arm-footbridge-fix-pci-interrupt-mapping.patch
+arm-9071-1-uprobes-don-t-hook-on-thumb-instructions.patch