linux/include
Mike Kravetz 34ae204f18 hugetlbfs: remove call to huge_pte_alloc without i_mmap_rwsem
Commit c0d0381ade ("hugetlbfs: use i_mmap_rwsem for more pmd sharing
synchronization") requires callers of huge_pte_alloc to hold i_mmap_rwsem
in at least read mode.  This is because the explicit locking in
huge_pmd_share (called by huge_pte_alloc) was removed.  When restructuring
the code, the call to huge_pte_alloc in the else block at the beginning of
hugetlb_fault was missed.

Unfortunately, that else clause is exercised when there is no page table
entry.  This will likely lead to a call to huge_pmd_share.  If
huge_pmd_share thinks pmd sharing is possible, it will traverse the
mapping tree (i_mmap) without holding i_mmap_rwsem.  If someone else is
modifying the tree, bad things such as addressing exceptions or worse
could happen.

Simply remove the else clause.  It should have been removed previously.
The code following the else will call huge_pte_alloc with the appropriate
locking.

To prevent this type of issue in the future, add routines to assert that
i_mmap_rwsem is held, and call these routines in huge pmd sharing
routines.

Fixes: c0d0381ade ("hugetlbfs: use i_mmap_rwsem for more pmd sharing synchronization")
Suggested-by: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Hugh Dickins <hughd@google.com>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: "Kirill A.Shutemov" <kirill.shutemov@linux.intel.com>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Prakash Sangappa <prakash.sangappa@oracle.com>
Cc: <stable@vger.kernel.org>
Link: http://lkml.kernel.org/r/e670f327-5cf9-1959-96e4-6dc7cc30d3d5@oracle.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2020-08-12 10:57:56 -07:00
..
acpi ACPI updates for 5.9-rc1 2020-08-03 20:37:22 -07:00
asm-generic Merge branch 'akpm' (patches from Andrew) 2020-08-07 11:39:33 -07:00
clocksource
crypto mm, treewide: rename kzfree() to kfree_sensitive() 2020-08-07 11:33:22 -07:00
drm drm next for 5.9-rc1 2020-08-05 19:50:06 -07:00
dt-bindings This is the bulk of the pin control changes for the v5.9 2020-08-09 12:52:28 -07:00
keys It's been a busy cycle for documentation - hopefully the busiest for a 2020-08-04 22:47:54 -07:00
kunit
kvm
linux hugetlbfs: remove call to huge_pte_alloc without i_mmap_rwsem 2020-08-12 10:57:56 -07:00
math-emu
media media updates for v5.9-rc1 2020-08-07 13:00:53 -07:00
memory
misc ocxl: Address kernel doc errors & warnings 2020-07-29 23:47:52 +10:00
net A set of locking fixes and updates: 2020-08-10 19:07:44 -07:00
pcmcia
ras
rdma RDMA 5.9 merge window pull request 2020-08-06 16:43:36 -07:00
scsi scsi: core: Only return started requests from scsi_host_find_tag() 2020-07-24 22:09:56 -04:00
soc It looks like a smaller batch of clk updates this time around. In the core 2020-08-07 13:35:51 -07:00
sound ALSA: hda: Add dma stop delay variable 2020-08-05 12:27:47 +02:00
target scsi: target: Add tmr_notify backend function 2020-07-28 22:25:26 -04:00
trace f2fs-for-5.9-rc1 2020-08-10 18:33:22 -07:00
uapi Highlights: 2020-08-09 13:58:04 -07:00
vdso
video
xen xen: branch for v5.9-rc1 2020-08-07 10:53:02 -07:00