} else {
// find task
if (us_proc_info.tgid == 0) {
- pid_t tgid = find_proc_by_task(task, us_proc_info.m_f_dentry);
- if (tgid) {
- us_proc_info.tgid = gl_nNotifyTgid = tgid;
+ if (check_dentry(task, us_proc_info.m_f_dentry)) {
+ us_proc_info.tgid = gl_nNotifyTgid = task->tgid;
procs = sspt_procs_get_by_task_or_new(task);
/* install probes in already mapped memory */
return err;
}
-pid_t find_proc_by_task(const struct task_struct *task, struct dentry *dentry)
+int check_dentry(struct task_struct *task, struct dentry *dentry)
{
struct vm_area_struct *vma;
struct mm_struct *mm = task->active_mm;
+
if (mm == NULL) {
return 0;
}
for (vma = mm->mmap; vma; vma = vma->vm_next) {
- if (check_vma(vma)) {
- if (vma->vm_file->f_dentry == dentry) {
- return task->tgid;
- }
+ if (check_vma(vma) && vma->vm_file->f_dentry == dentry) {
+ return 1;
}
}
int check_install_pages_in_file(struct task_struct *task, struct sspt_file *file);
void install_proc_probes(struct task_struct *task, struct sspt_procs *procs);
-pid_t find_proc_by_task(const struct task_struct *task, struct dentry *dentry);
+int check_dentry(struct task_struct *task, struct dentry *dentry);
void install_page_probes(unsigned long page_addr, struct task_struct *task, struct sspt_procs *procs);
int uninstall_us_proc_probes(struct task_struct *task, struct sspt_procs *procs, enum US_FLAGS flag);
int check_vma(struct vm_area_struct *vma);