prevent boosting kprobes on exception address
authorMasami Hiramatsu <[email protected]>
Mon, 16 Mar 2009 22:57:22 +0000 (18:57 -0400)
committerLinus Torvalds <[email protected]>
Tue, 17 Mar 2009 16:11:48 +0000 (09:11 -0700)
Don't boost at the addresses which are listed on exception tables,
because major page fault will occur on those addresses.  In that case,
kprobes can not ensure that when instruction buffer can be freed since
some processes will sleep on the buffer.

kprobes-ia64 already has same check.

Signed-off-by: Masami Hiramatsu <[email protected]>
Cc: Ananth N Mavinakayanahalli <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
arch/x86/kernel/kprobes.c

index e948b28a5a9ab47a1f0d91d78ec7039f315830bd..4558dd3918cf3ec66263d7ac8e705acb4a5ea5a9 100644 (file)
@@ -193,6 +193,9 @@ static int __kprobes can_boost(kprobe_opcode_t *opcodes)
        kprobe_opcode_t opcode;
        kprobe_opcode_t *orig_opcodes = opcodes;
 
+       if (search_exception_tables(opcodes))
+               return 0;       /* Page fault may occur on this address. */
+
 retry:
        if (opcodes - orig_opcodes > MAX_INSN_SIZE - 1)
                return 0;