diff options
author | Masami Hiramatsu <[email protected]> | 2010-03-09 10:22:19 -0500 |
---|---|---|
committer | Ingo Molnar <[email protected]> | 2010-03-11 14:06:16 +0100 |
commit | 83ff56f46a8532488ee364bb93a9cb2a59490d33 (patch) | |
tree | eacccd619d004b2578bc14e6049eb7c03aac8bb0 | |
parent | a12b51c478899fe0b7e874a559b05ba35f1128ee (diff) |
kprobes: Calculate the index correctly when freeing the out-of-line execution slot
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: <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
-rw-r--r-- | kernel/kprobes.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/kprobes.c b/kernel/kprobes.c index fa034d29cf73..0ed46f3e51e9 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -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) { |