kprobes: Calculate the index correctly when freeing the out-of-line execution slot
authorMasami Hiramatsu <[email protected]>
Tue, 9 Mar 2010 15:22:19 +0000 (10:22 -0500)
committerIngo Molnar <[email protected]>
Thu, 11 Mar 2010 13:06:16 +0000 (14:06 +0100)
From : Ananth N Mavinakayanahalli <[email protected]>

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 <[email protected]>
Reported-by: Heiko Carstens <[email protected]>
Signed-off-by: Ananth N Mavinakayanahalli <[email protected]>
Signed-off-by: Masami Hiramatsu <[email protected]>
LKML-Reference: <4B9667AB.9050507@redhat.com>
Signed-off-by: Ingo Molnar <[email protected]>
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) {