• David Hildenbrand's avatar
    mm: follow_pte() improvements · c5541ba3
    David Hildenbrand authored
    follow_pte() is now our main function to lookup PTEs in VM_PFNMAP/VM_IO
    VMAs.  Let's perform some more sanity checks to make this exported
    function harder to abuse.
    
    Further, extend the doc a bit, it still focuses on the KVM use case with
    MMU notifiers.  Drop the KVM+follow_pfn() comment, follow_pfn() is no
    more, and we have other users nowadays.
    
    Also extend the doc regarding refcounted pages and the interaction with
    MMU notifiers.
    
    KVM is one example that uses MMU notifiers and can deal with refcounted
    pages properly.  VFIO is one example that doesn't use MMU notifiers, and
    to prevent use-after-free, rejects refcounted pages: pfn_valid(pfn) &&
    !PageReserved(pfn_to_page(pfn)).  Protection changes are less of a concern
    for users like VFIO: the behavior is similar to longterm-pinning a page,
    and getting the PTE protection changed afterwards.
    
    The primary concern with refcounted pages is use-after-free, which callers
    should be aware of.
    
    Link: https://lkml.kernel.org/r/20240410155527.474777-4-david@redhat.comSigned-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Cc: Alex Williamson <alex.williamson@redhat.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Fei Li <fei1.li@intel.com>
    Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
    Cc: Heiko Carstens <hca@linux.ibm.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Sean Christopherson <seanjc@google.com>
    Cc: Yonghua Huang <yonghua.huang@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    c5541ba3
memory.c 177 KB