On 03/15/2018 07:51 PM, Oleg Nesterov wrote: > On 03/13, Ravi Bangoria wrote: >> @@ -1053,6 +1056,9 @@ int uprobe_mmap(struct vm_area_struct *vma) >> struct uprobe *uprobe, *u; >> struct inode *inode; >> >> + if (uprobe_mmap_callback) >> + uprobe_mmap_callback(vma); >> + >> if (no_uprobe_events() || !valid_vma(vma, true)) >> return 0; > probe_event_enable() does > > uprobe_register(); > /* WINDOW */ > sdt_increment_ref_ctr(); > > what if uprobe_mmap() is called in between? The counter(s) in this vma > will be incremented twice, no? I guess, it's a valid issue with PATCH 5 but should be taken care by PATCH 6. > >> +static struct vm_area_struct * >> +sdt_find_vma(struct mm_struct *mm, struct trace_uprobe *tu) >> +{ >> + struct vm_area_struct *tmp; >> + >> + for (tmp = mm->mmap; tmp != NULL; tmp = tmp->vm_next) >> + if (sdt_valid_vma(tu, tmp)) >> + return tmp; >> + >> + return NULL; > I can't understand the logic... Lets ignore sdt_valid_vma() for now. > The caller has uprobe_map_info, why it can't simply do > vma = find_vma(uprobe_map_info->vaddr)? and then check sdt_valid_vma(). Yes. that should work. Will change it. Thanks for the review, Ravi