From: Nick Alcock Date: Mon, 31 Oct 2016 10:44:26 +0000 (+0000) Subject: dtrace: take mmap_sem in PTRACE_GETMAPFD X-Git-Tag: v4.1.12-92~25^2~7 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=c5e8c2137267addd66d214f0c7b986793cedf0af;p=users%2Fjedix%2Flinux-maple.git dtrace: take mmap_sem in PTRACE_GETMAPFD Without this, we may oops if the process exec()s and discards its address space after we find_vma(). Signed-off-by: Nick Alcock Acked-by: Kris Van Hees Reviewed-by: Shannon Nelson Orabug: 24977175 --- diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 5c511f403e42a..10467305c8eb3 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c @@ -815,6 +815,7 @@ static int ptrace_getmapfd(struct task_struct *child, unsigned long addr, mm = get_task_mm(child); files = get_files_struct(child); + down_read(&mm->mmap_sem); vma = find_vma(mm, addr); if (!vma || vma->vm_start > addr) { @@ -838,6 +839,7 @@ static int ptrace_getmapfd(struct task_struct *child, unsigned long addr, fd_install(new_fd, vma->vm_file); err: + up_read(&mm->mmap_sem); put_files_struct(files); mmput(mm);