uprobe: uretprobes cleanup 16/94216/2
authorAlexander Aksenov <a.aksenov@samsung.com>
Thu, 26 Jun 2014 10:31:24 +0000 (14:31 +0400)
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>
Thu, 27 Oct 2016 12:55:27 +0000 (15:55 +0300)
Add uretprobes cleanup when swap_register_uprobe() fails

Change-Id: I89d2528d01835b5f6c2d3dd2d2f9bc0148c25d8b
Signed-off-by: Alexander Aksenov <a.aksenov@samsung.com>
uprobe/swap_uprobes.c

index 4a0d3c0..cee4adc 100644 (file)
@@ -818,8 +818,8 @@ int swap_register_uretprobe(struct uretprobe *rp)
        for (i = 0; i < rp->maxactive; i++) {
                inst = kmalloc(sizeof(*inst) + rp->data_size, GFP_KERNEL);
                if (inst == NULL) {
-                       free_urp_inst(rp);
-                       return -ENOMEM;
+                       ret = -ENOMEM;
+                       goto register_err;
                }
 
                INIT_HLIST_NODE(&inst->uflist);
@@ -831,11 +831,16 @@ int swap_register_uretprobe(struct uretprobe *rp)
        /* Establish function entry probe point */
        ret = swap_register_uprobe(&rp->up);
        if (ret)
-               return ret;
+               goto register_err;
 
        arch_opcode_analysis_uretprobe(rp);
 
        return 0;
+
+register_err:
+       free_urp_inst(rp);
+
+       return ret;
 }
 EXPORT_SYMBOL_GPL(swap_register_uretprobe);