• Peter Xu's avatar
    mm/khugepaged: don't recycle vma pgtable if uffd-wp registered · deb4c93a
    Peter Xu authored
    When we're trying to collapse a 2M huge shmem page, don't retract pgtable
    pmd page if it's registered with uffd-wp, because that pgtable could have
    pte markers installed.  Recycling of that pgtable means we'll lose the pte
    markers.  That could cause data loss for an uffd-wp enabled application on
    shmem.
    
    Instead of disabling khugepaged on these files, simply skip retracting
    these special VMAs, then the page cache can still be merged into a huge
    thp, and other mm/vma can still map the range of file with a huge thp when
    proper.
    
    Note that checking VM_UFFD_WP needs to be done with mmap_sem held for
    write, that avoids race like:
    
             khugepaged                             user thread
             ==========                             ===========
         check VM_UFFD_WP, not set
                                           UFFDIO_REGISTER with uffd-wp on shmem
                                           wr-protect some pages (install markers)
         take mmap_sem write lock
         erase pmd and free pmd page
          --> pte markers are dropped unnoticed!
    
    Link: https://lkml.kernel.org/r/20220405014921.14994-1-peterx@redhat.comSigned-off-by: default avatarPeter Xu <peterx@redhat.com>
    Cc: Alistair Popple <apopple@nvidia.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Axel Rasmussen <axelrasmussen@google.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Jerome Glisse <jglisse@redhat.com>
    Cc: "Kirill A . Shutemov" <kirill@shutemov.name>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Mike Rapoport <rppt@linux.vnet.ibm.com>
    Cc: Nadav Amit <nadav.amit@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    deb4c93a
khugepaged.c 60.5 KB