• Jann Horn's avatar
    x86/kprobes: Stop calling fixup_exception() from kprobe_fault_handler() · e3e4d501
    Jann Horn authored
    This removes the call into exception fixup that was added in commit
    c28f8966 ("[PATCH] kprobes: fix broken fault handling for x86_64").
    
    On X86, kprobe_fault_handler() is called from two places:
    do_general_protection() (for #GP) and kprobes_fault() (for #PF).  In both
    paths, the fixup_exception() call in the kprobe fault handler is redundant.
    
    In case of #GP, fixup_exception() is called immediately before
    kprobe_fault_handler() is invoked, so no need to try that again. This
    assumes that the kprobe's fault handler isn't going to do something crazy
    like changing RIP so that it suddenly points to an instruction that does
    userspace access.
    
    For #PF on a kernel address from kernel space, after the kprobe fault
    handler has run, no_context() is invoked, which calls fixup_exception().
    Signed-off-by: default avatarJann Horn <jannh@google.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Tested-by: default avatarKees Cook <keescook@chromium.org>
    Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: kernel-hardening@lists.openwall.com
    Cc: linux-kernel@vger.kernel.org
    Cc: dvyukov@google.com
    Cc: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>
    Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: linux-fsdevel@vger.kernel.org
    Cc: Borislav Petkov <bp@alien8.de>
    Link: https://lkml.kernel.org/r/20180828201421.157735-4-jannh@google.com
    e3e4d501
core.c 30.6 KB