From 5cc1a71a74690b0d315f7379879ac46c37ecb6eb Mon Sep 17 00:00:00 2001 From: Nikita Kalyazin Date: Thu, 10 May 2012 13:27:58 +0400 Subject: [PATCH] Added insn slot freeing (1f5667fbd58ec011dcb6020e535baa8306c707bd related) --- kprobe/arch/asm-arm/dbi_kprobes.c | 2 +- kprobe/arch/dbi_kprobes.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/kprobe/arch/asm-arm/dbi_kprobes.c b/kprobe/arch/asm-arm/dbi_kprobes.c index 4ac53bd..63f15ca 100644 --- a/kprobe/arch/asm-arm/dbi_kprobes.c +++ b/kprobe/arch/asm-arm/dbi_kprobes.c @@ -867,7 +867,7 @@ int arch_copy_trampoline_arm_uprobe (struct kprobe *p, struct task_struct *task, panic("failed to write memory %p!\n", p->ainsn.insn); DBPRINTF ("failed to write insn slot to process memory: insn %p, addr %p, probe %p!", insn, p->ainsn.insn, p->addr); //printk ("failed to write insn slot to process memory: %p/%d insn %lx, addr %p, probe %p!\n", task, task->pid, insn, p->ainsn.insn, p->addr); - free_insn_slot (&uprobe_insn_pages, task, p->ainsn.insn, 0); + free_insn_slot (&uprobe_insn_pages, task, p->ainsn.insn_arm, 0); return -EINVAL; } } diff --git a/kprobe/arch/dbi_kprobes.c b/kprobe/arch/dbi_kprobes.c index 45ba909..5d764f6 100644 --- a/kprobe/arch/dbi_kprobes.c +++ b/kprobe/arch/dbi_kprobes.c @@ -71,12 +71,20 @@ extern unsigned long (*kallsyms_search) (const char *name); void arch_remove_kprobe (struct kprobe *p, struct task_struct *task) { - if(p->tgid) + if (p->tgid) { +#ifdef CONFIG_ARM + free_insn_slot (&uprobe_insn_pages, task, \ + p->ainsn.insn_arm, (p->ainsn.boostable == 1)); + free_insn_slot (&uprobe_insn_pages, task, \ + p->ainsn.insn_thumb, (p->ainsn.boostable == 1)); +#else /* CONFIG_ARM */ free_insn_slot (&uprobe_insn_pages, task, \ p->ainsn.insn, (p->ainsn.boostable == 1)); - else +#endif /* CONFIG_ARM */ + } else { free_insn_slot (&kprobe_insn_pages, NULL, \ p->ainsn.insn, (p->ainsn.boostable == 1)); + } } void arch_arm_uprobe (struct kprobe *p, struct task_struct *tsk) -- 2.7.4