lkml.org 
[lkml]   [2022]   [Nov]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH mm-unstable v1 05/20] mm: add early FAULT_FLAG_WRITE consistency checks
    Date
    Let's catch abuse of FAULT_FLAG_WRITE early, such that we don't have to
    care in all other handlers and might get "surprises" if we forget to do
    so.

    Write faults without VM_MAYWRITE don't make any sense, and our
    maybe_mkwrite() logic could have hidden such abuse for now.

    Write faults without VM_WRITE on something that is not a COW mapping is
    similarly broken, and e.g., do_wp_page() could end up placing an
    anonymous page into a shared mapping, which would be bad.

    This is a preparation for reliable R/O long-term pinning of pages in
    private mappings, whereby we want to make sure that we will never break
    COW in a read-only private mapping.

    Signed-off-by: David Hildenbrand <david@redhat.com>
    ---
    mm/memory.c | 8 ++++++++
    1 file changed, 8 insertions(+)

    diff --git a/mm/memory.c b/mm/memory.c
    index e014435a87db..c4fa378ec2a0 100644
    --- a/mm/memory.c
    +++ b/mm/memory.c
    @@ -5170,6 +5170,14 @@ static vm_fault_t sanitize_fault_flags(struct vm_area_struct *vma,
    */
    if (!is_cow_mapping(vma->vm_flags))
    *flags &= ~FAULT_FLAG_UNSHARE;
    + } else if (*flags & FAULT_FLAG_WRITE) {
    + /* Write faults on read-only mappings are impossible ... */
    + if (WARN_ON_ONCE(!(vma->vm_flags & VM_MAYWRITE)))
    + return VM_FAULT_SIGSEGV;
    + /* ... and FOLL_FORCE only applies to COW mappings. */
    + if (WARN_ON_ONCE(!(vma->vm_flags & VM_WRITE) &&
    + !is_cow_mapping(vma->vm_flags)))
    + return VM_FAULT_SIGSEGV;
    }
    return 0;
    }
    --
    2.38.1
    \
     
     \ /
      Last update: 2022-11-16 11:36    [W:4.270 / U:1.724 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site