kprobes: Calculate the index correctly when freeing the out-of-line execution slot
authorMasami Hiramatsu <mhiramat@redhat.com>
Tue, 9 Mar 2010 15:22:19 +0000 (10:22 -0500)
committerIngo Molnar <mingo@elte.hu>
Thu, 11 Mar 2010 13:06:16 +0000 (14:06 +0100)
From : Ananth N Mavinakayanahalli <ananth@in.ibm.com>

When freeing the instruction slot, the arithmetic to calculate
the index of the slot in the page needs to account for the total
size of the instruction on the various architectures.

Calculate the index correctly when freeing the out-of-line
execution slot.

Reported-by: Sachin Sant <sachinp@in.ibm.com>
Reported-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
LKML-Reference: <4B9667AB.9050507@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/kprobes.c

index fa034d29cf73d5730f531b7bfd98682278d077b4..0ed46f3e51e9812e036ed618a1bc5c12e9328de9 100644 (file)
@@ -259,7 +259,8 @@ static void __kprobes __free_insn_slot(struct kprobe_insn_cache *c,
        struct kprobe_insn_page *kip;
 
        list_for_each_entry(kip, &c->pages, list) {
-               long idx = ((long)slot - (long)kip->insns) / c->insn_size;
+               long idx = ((long)slot - (long)kip->insns) /
+                               (c->insn_size * sizeof(kprobe_opcode_t));
                if (idx >= 0 && idx < slots_per_page(c)) {
                        WARN_ON(kip->slot_used[idx] != SLOT_USED);
                        if (dirty) {