diff options
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.patch | 83 |
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 - |