• Claudio Imbrenda's avatar
    mm/gup/writeback: add callbacks for inaccessible pages · f28d4363
    Claudio Imbrenda authored
    With the introduction of protected KVM guests on s390 there is now a
    concept of inaccessible pages.  These pages need to be made accessible
    before the host can access them.
    
    While cpu accesses will trigger a fault that can be resolved, I/O accesses
    will just fail.  We need to add a callback into architecture code for
    places that will do I/O, namely when writeback is started or when a page
    reference is taken.
    
    This is not only to enable paging, file backing etc, it is also necessary
    to protect the host against a malicious user space.  For example a bad
    QEMU could simply start direct I/O on such protected memory.  We do not
    want userspace to be able to trigger I/O errors and thus the logic is
    "whenever somebody accesses that page (gup) or does I/O, make sure that
    this page can be accessed".  When the guest tries to access that page we
    will wait in the page fault handler for writeback to have finished and for
    the page_ref to be the expected value.
    
    On s390x the function is not supposed to fail, so it is ok to use a
    WARN_ON on failure.  If we ever need some more finegrained handling we can
    tackle this when we know the details.
    Signed-off-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
    Reviewed-by: default avatarJohn Hubbard <jhubbard@nvidia.com>
    Acked-by: default avatarWill Deacon <will@kernel.org>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Ira Weiny <ira.weiny@intel.com>
    Cc: Jérôme Glisse <jglisse@redhat.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Dave Chinner <david@fromorbit.com>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Link: http://lkml.kernel.org/r/20200306132537.783769-3-imbrenda@linux.ibm.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f28d4363
gup.c 80.8 KB