lkml.org 
[lkml]   [2018]   [Mar]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 3.18 44/63] kprobes/x86: Fix kprobe-booster not to boost far call instructions
    Date
    From: Masami Hiramatsu <mhiramat@kernel.org>

    [ Upstream commit bd0b90676c30fe640e7ead919b3e38846ac88ab7 ]

    Fix the kprobe-booster not to boost far call instruction,
    because a call may store the address in the single-step
    execution buffer to the stack, which should be modified
    after single stepping.

    Currently, this instruction will be filtered as not
    boostable in resume_execution(), so this is not a
    critical issue.

    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
    Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: David S . Miller <davem@davemloft.net>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ye Xiaolong <xiaolong.ye@intel.com>
    Link: http://lkml.kernel.org/r/149076340615.22469.14066273186134229909.stgit@devbox
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    arch/x86/kernel/kprobes/core.c | 2 ++
    1 file changed, 2 insertions(+)

    diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
    index b6547a441bad..422b76ab0374 100644
    --- a/arch/x86/kernel/kprobes/core.c
    +++ b/arch/x86/kernel/kprobes/core.c
    @@ -196,6 +196,8 @@ retry:
    return (opcode != 0x62 && opcode != 0x67);
    case 0x70:
    return 0; /* can't boost conditional jump */
    + case 0x90:
    + return opcode != 0x9a; /* can't boost call far */
    case 0xc0:
    /* can't boost software-interruptions */
    return (0xc1 < opcode && opcode < 0xcc) || opcode == 0xcf;
    --
    2.14.1
    \
     
     \ /
      Last update: 2018-03-03 23:48    [W:3.584 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site