From c62b00f6e7cd831b8e5085625e5fd2eb4dfb89db Mon Sep 17 00:00:00 2001 From: Alexander Aksenov Date: Wed, 25 Jun 2014 15:00:06 +0400 Subject: [PATCH] [FIX] Kprobe: remove_kprobe() when unregister Now remove_kprobe() called from swap_unregister_valid_kprobe(). Its call was in swap_unregister_kretprobe_bottom() and that has led to memory leaks when using simple kprobe, not kretprobe. Change-Id: Iade99439eadf389539efc497c0fc71b52be9eee1 Signed-off-by: Alexander Aksenov --- kprobe/swap_kprobes.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/kprobe/swap_kprobes.c b/kprobe/swap_kprobes.c index 95bdbe5..ef545a6 100644 --- a/kprobe/swap_kprobes.c +++ b/kprobe/swap_kprobes.c @@ -556,6 +556,7 @@ static void swap_unregister_valid_kprobe(struct kprobe *p, struct kprobe *old_p) /* Only probe on the hash list */ swap_arch_disarm_kprobe(p); hlist_del_rcu(&old_p->hlist); + remove_kprobe(old_p); if (p != old_p) { list_del_rcu(&old_p->list); @@ -874,9 +875,6 @@ void swap_unregister_kretprobe_bottom(struct kretprobe *rp) unsigned long flags; struct kretprobe_instance *ri; - if (list_empty(&rp->kp.list)) - remove_kprobe(&rp->kp); - spin_lock_irqsave(&kretprobe_lock, flags); while ((ri = get_used_rp_inst(rp)) != NULL) { -- 2.7.4