[FIX] warning in ktd_exit() 95/66595/2
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Tue, 19 Apr 2016 14:51:36 +0000 (17:51 +0300)
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>
Fri, 22 Apr 2016 12:10:55 +0000 (15:10 +0300)
Set proc pointer to NULL before free

Change-Id: I2fd81a84b55c9b8bdbfc7809e7ab5abfeb24aaf5
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
us_manager/pf/pf_group.c
us_manager/sspt/sspt_proc.c
us_manager/sspt/sspt_proc.h

index 4a81560..0850323 100644 (file)
@@ -650,7 +650,6 @@ static void mmr_from_exit(struct sspt_proc *proc)
        uninstall_proc(proc);
 
        pfg_all_del_proc(proc);
-       sspt_reset_proc(proc->leader);
 }
 
 static void mmr_from_exec(struct sspt_proc *proc)
index f5e2512..3b0b691 100644 (file)
@@ -152,7 +152,7 @@ void sspt_change_leader(struct task_struct *prev, struct task_struct *next)
        spin_unlock(&prev_kproc->lock);
 }
 
-void sspt_reset_proc(struct task_struct *task)
+static void sspt_reset_proc(struct task_struct *task)
 {
        struct ktd_proc *kproc;
 
@@ -197,6 +197,14 @@ static struct sspt_proc *sspt_proc_create(struct task_struct *leader)
        return proc;
 }
 
+static void sspt_proc_free(struct sspt_proc *proc)
+{
+       put_task_struct(proc->leader);
+       free_sm_us(proc->sm);
+       sspt_destroy_feature(proc->feature);
+       kfree(proc);
+}
+
 /**
  * @brief Remove sspt_proc struct
  *
@@ -221,6 +229,7 @@ void sspt_proc_cleanup(struct sspt_proc *proc)
        sspt_destroy_feature(proc->feature);
 
        free_sm_us(proc->sm);
+       sspt_reset_proc(proc->leader);
        sspt_proc_put(proc);
 }
 
@@ -243,6 +252,8 @@ void sspt_proc_put(struct sspt_proc *proc)
                        proc->__task = NULL;
                }
 
+               WARN_ON(kproc_by_task(proc->leader)->proc);
+
                put_task_struct(proc->leader);
                kfree(proc);
        }
@@ -334,7 +345,7 @@ struct sspt_proc *sspt_proc_get_by_task_or_new(struct task_struct *task)
        spin_unlock(&kproc->lock);
 
        if (proc)
-               sspt_proc_cleanup(proc);
+               sspt_proc_free(proc);
 
 out:
        return kproc->proc;
index ec7a133..187e8c5 100644 (file)
@@ -139,7 +139,6 @@ int sspt_proc_cb_set(struct sspt_proc_cb *cb);
 void sspt_proc_priv_create(struct sspt_proc *proc);
 void sspt_proc_priv_destroy(struct sspt_proc *proc);
 
-void sspt_reset_proc(struct task_struct *task);
 void sspt_change_leader(struct task_struct *prev, struct task_struct *next);
 int sspt_proc_init(void);
 void sspt_proc_uninit(void);