[FIX] Kprobe: remove_kprobe() when unregister 31/23431/2
authorAlexander Aksenov <a.aksenov@samsung.com>
Wed, 25 Jun 2014 11:00:06 +0000 (15:00 +0400)
committerDmitry Kovalenko <d.kovalenko@samsung.com>
Thu, 26 Jun 2014 06:09:39 +0000 (23:09 -0700)
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 <a.aksenov@samsung.com>
kprobe/swap_kprobes.c

index 95bdbe5..ef545a6 100644 (file)
@@ -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) {