[IMPROVE] Do not call cb_clean_child on non instrumented process 08/47308/3
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Sun, 30 Aug 2015 13:14:14 +0000 (16:14 +0300)
committerVasiliy Ulyanov <v.ulyanov@samsung.com>
Mon, 7 Sep 2015 08:09:55 +0000 (01:09 -0700)
Change-Id: I86767ac7dbb62e537e82ffa0062d1472c792887d
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
us_manager/helper.c

index 37e4882..2e71afd 100644 (file)
@@ -254,7 +254,6 @@ static unsigned long cb_clean_child(void *data)
 static void rm_uprobes_child(struct kretprobe_instance *ri,
                             struct pt_regs *regs, struct task_struct *child)
 {
-       int ret;
        struct sspt_proc *proc;
        struct clean_data cdata = {
                .task = child,
@@ -263,20 +262,22 @@ static void rm_uprobes_child(struct kretprobe_instance *ri,
        };
 
        sspt_proc_write_lock();
-
        proc = sspt_proc_get_by_task(current);
        if (proc) {
                sspt_proc_on_each_ip(proc, func_uinst_creare, (void *)&cdata.head);
                urinst_info_get_current_hlist(&cdata.rhead);
        }
-
        sspt_proc_write_unlock();
 
-       /* set jumper */
-       ret = set_jump_cb((unsigned long)ri->ret_addr, regs, cb_clean_child,
-                         &cdata, sizeof(cdata));
-       if (ret == 0)
-               ri->ret_addr = (unsigned long *)get_jump_addr();
+       if (proc) {
+               int ret;
+
+               /* set jumper */
+               ret = set_jump_cb((unsigned long)ri->ret_addr, regs,
+                                 cb_clean_child, &cdata, sizeof(cdata));
+               if (ret == 0)
+                       ri->ret_addr = (unsigned long *)get_jump_addr();
+       }
 }