Messages in this thread | | | Date | Wed, 14 Mar 2018 17:59:44 +0100 | From | Oleg Nesterov <> | Subject | Re: [PATCH 5/8] trace_uprobe: Support SDT markers having reference count (semaphore) |
| |
On 03/13, Ravi Bangoria wrote: > > +static bool sdt_valid_vma(struct trace_uprobe *tu, struct vm_area_struct *vma) > +{ > + unsigned long vaddr = vma_offset_to_vaddr(vma, tu->ref_ctr_offset); > + > + return tu->ref_ctr_offset && > + vma->vm_file && > + file_inode(vma->vm_file) == tu->inode && > + vma->vm_flags & VM_WRITE && > + vma->vm_start <= vaddr && > + vma->vm_end > vaddr; > +}
Perhaps in this case a simple
ref_ctr_offset < vma->vm_end - vma->vm_start
check without vma_offset_to_vaddr() makes more sense, but I won't insist.
> +static void sdt_increment_ref_ctr(struct trace_uprobe *tu) > +{ > + struct uprobe_map_info *info; > + struct vm_area_struct *vma; > + unsigned long vaddr; > + > + uprobe_start_dup_mmap(); > + info = uprobe_build_map_info(tu->inode->i_mapping, > + tu->ref_ctr_offset, false);
Hmm. This doesn't look right.
If you need to find all mappings (and avoid the races with fork/dup_mmap) you need to take this semaphore for writing, uprobe_start_dup_mmap() can't help.
Oleg.
| |