Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1305081

Re: mm: possible deadlock in mm_take_all_locks

From "Kirill A. Shutemov" <kirill@shutemov.name>
Newsgroups linux.kernel
Subject Re: mm: possible deadlock in mm_take_all_locks
Date 2016-01-09 00:30 +0100
Message-ID <qOODM-5p4-11@gated-at.bofh.it> (permalink)
References <qOIym-YW-9@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Fri, Jan 08, 2016 at 05:58:33PM +0100, Dmitry Vyukov wrote:
> Hello,
> 
> I've hit the following deadlock warning while running syzkaller fuzzer
> on commit b06f3a168cdcd80026276898fd1fee443ef25743. As far as I
> understand this is a false positive, because both call stacks are
> protected by mm_all_locks_mutex.

+Michal

I don't think it's false positive.

The reason we don't care about order of taking i_mmap_rwsem is that we
never takes i_mmap_rwsem under other i_mmap_rwsem, but that's not true for
i_mmap_rwsem vs. hugetlbfs_i_mmap_rwsem_key. That's why we have the
annotation in the first place.

See commit b610ded71918 ("hugetlb: fix lockdep splat caused by pmd
sharing").

Consider totally untested patch below.

diff --git a/mm/mmap.c b/mm/mmap.c
index 2ce04a649f6b..63aefcf409e1 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -3203,7 +3203,16 @@ int mm_take_all_locks(struct mm_struct *mm)
 	for (vma = mm->mmap; vma; vma = vma->vm_next) {
 		if (signal_pending(current))
 			goto out_unlock;
-		if (vma->vm_file && vma->vm_file->f_mapping)
+		if (vma->vm_file && vma->vm_file->f_mapping &&
+				!is_vm_hugetlb_page(vma))
+			vm_lock_mapping(mm, vma->vm_file->f_mapping);
+	}
+
+	for (vma = mm->mmap; vma; vma = vma->vm_next) {
+		if (signal_pending(current))
+			goto out_unlock;
+		if (vma->vm_file && vma->vm_file->f_mapping &&
+				is_vm_hugetlb_page(vma))
 			vm_lock_mapping(mm, vma->vm_file->f_mapping);
 	}
 
-- 
 Kirill A. Shutemov

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

mm: possible deadlock in mm_take_all_locks Dmitry Vyukov <dvyukov@google.com> - 2016-01-08 18:00 +0100
  Re: mm: possible deadlock in mm_take_all_locks "Kirill A. Shutemov" <kirill@shutemov.name> - 2016-01-09 00:30 +0100
    Re: mm: possible deadlock in mm_take_all_locks Dmitry Vyukov <dvyukov@google.com> - 2016-01-10 09:10 +0100
      Re: mm: possible deadlock in mm_take_all_locks "Kirill A. Shutemov" <kirill@shutemov.name> - 2016-01-10 21:40 +0100
        Re: mm: possible deadlock in mm_take_all_locks Dmitry Vyukov <dvyukov@google.com> - 2016-01-11 10:10 +0100

csiph-web