aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.9.21/0088-kprobes-x86-Disable-optimizing-on-the-function-jumps.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.9.21/0088-kprobes-x86-Disable-optimizing-on-the-function-jumps.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.9.21/0088-kprobes-x86-Disable-optimizing-on-the-function-jumps.patch83
1 files changed, 0 insertions, 83 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.9.21/0088-kprobes-x86-Disable-optimizing-on-the-function-jumps.patch b/common/recipes-kernel/linux/linux-yocto-4.9.21/0088-kprobes-x86-Disable-optimizing-on-the-function-jumps.patch
deleted file mode 100644
index cac6deac..00000000
--- a/common/recipes-kernel/linux/linux-yocto-4.9.21/0088-kprobes-x86-Disable-optimizing-on-the-function-jumps.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From fdeb7a1f0247fca891d02ce491582ba950f7ee15 Mon Sep 17 00:00:00 2001
-From: Masami Hiramatsu <mhiramat@kernel.org>
-Date: Fri, 19 Jan 2018 01:15:20 +0900
-Subject: [PATCH 088/103] kprobes/x86: Disable optimizing on the function jumps
- to indirect thunk
-
-commit c86a32c09f8ced67971a2310e3b0dda4d1749007 upstream.
-
-Since indirect jump instructions will be replaced by jump
-to __x86_indirect_thunk_*, those jmp instruction must be
-treated as an indirect jump. Since optprobe prohibits to
-optimize probes in the function which uses an indirect jump,
-it also needs to find out the function which jump to
-__x86_indirect_thunk_* and disable optimization.
-
-Add a check that the jump target address is between the
-__indirect_thunk_start/end when optimizing kprobe.
-
-Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Acked-by: David Woodhouse <dwmw@amazon.co.uk>
-Cc: Andi Kleen <ak@linux.intel.com>
-Cc: Peter Zijlstra <peterz@infradead.org>
-Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
-Cc: Arjan van de Ven <arjan@linux.intel.com>
-Cc: Greg Kroah-Hartman <gregkh@linux-foundation.org>
-Link: https://lkml.kernel.org/r/151629212062.10241.6991266100233002273.stgit@devbox
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/x86/kernel/kprobes/opt.c | 23 ++++++++++++++++++++++-
- 1 file changed, 22 insertions(+), 1 deletion(-)
-
-diff --git a/arch/x86/kernel/kprobes/opt.c b/arch/x86/kernel/kprobes/opt.c
-index 3bb4c5f..90f8cd6 100644
---- a/arch/x86/kernel/kprobes/opt.c
-+++ b/arch/x86/kernel/kprobes/opt.c
-@@ -37,6 +37,7 @@
- #include <asm/alternative.h>
- #include <asm/insn.h>
- #include <asm/debugreg.h>
-+#include <asm/nospec-branch.h>
-
- #include "common.h"
-
-@@ -192,7 +193,7 @@ static int copy_optimized_instructions(u8 *dest, u8 *src)
- }
-
- /* Check whether insn is indirect jump */
--static int insn_is_indirect_jump(struct insn *insn)
-+static int __insn_is_indirect_jump(struct insn *insn)
- {
- return ((insn->opcode.bytes[0] == 0xff &&
- (X86_MODRM_REG(insn->modrm.value) & 6) == 4) || /* Jump */
-@@ -226,6 +227,26 @@ static int insn_jump_into_range(struct insn *insn, unsigned long start, int len)
- return (start <= target && target <= start + len);
- }
-
-+static int insn_is_indirect_jump(struct insn *insn)
-+{
-+ int ret = __insn_is_indirect_jump(insn);
-+
-+#ifdef CONFIG_RETPOLINE
-+ /*
-+ * Jump to x86_indirect_thunk_* is treated as an indirect jump.
-+ * Note that even with CONFIG_RETPOLINE=y, the kernel compiled with
-+ * older gcc may use indirect jump. So we add this check instead of
-+ * replace indirect-jump check.
-+ */
-+ if (!ret)
-+ ret = insn_jump_into_range(insn,
-+ (unsigned long)__indirect_thunk_start,
-+ (unsigned long)__indirect_thunk_end -
-+ (unsigned long)__indirect_thunk_start);
-+#endif
-+ return ret;
-+}
-+
- /* Decode whole function to ensure any instructions don't jump into target */
- static int can_optimize(unsigned long paddr)
- {
---
-2.7.4
-