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;
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
*
sspt_destroy_feature(proc->feature);
free_sm_us(proc->sm);
+ sspt_reset_proc(proc->leader);
sspt_proc_put(proc);
}
proc->__task = NULL;
}
+ WARN_ON(kproc_by_task(proc->leader)->proc);
+
put_task_struct(proc->leader);
kfree(proc);
}
spin_unlock(&kproc->lock);
if (proc)
- sspt_proc_cleanup(proc);
+ sspt_proc_free(proc);
out:
return kproc->proc;
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);