• Daniel Vetter's avatar
    s390/pci: remove races against pte updates · a67a88b0
    Daniel Vetter authored
    Way back it was a reasonable assumptions that iomem mappings never
    change the pfn range they point at. But this has changed:
    
    - gpu drivers dynamically manage their memory nowadays, invalidating
    ptes with unmap_mapping_range when buffers get moved
    
    - contiguous dma allocations have moved from dedicated carvetouts to
    cma regions. This means if we miss the unmap the pfn might contain
    pagecache or anon memory (well anything allocated with GFP_MOVEABLE)
    
    - even /dev/mem now invalidates mappings when the kernel requests that
    iomem region when CONFIG_IO_STRICT_DEVMEM is set, see
    commit 3234ac66 ("/dev/mem: Revoke mappings when a driver claims the
    region")
    
    Accessing pfns obtained from ptes without holding all the locks is
    therefore no longer a good idea. Fix this.
    
    Since zpci_memcpy_from|toio seems to not do anything nefarious with
    locks we just need to open code get_pfn and follow_pfn and make sure
    we drop the locks only after we're done. The write function also needs
    the copy_from_user move, since we can't take userspace faults while
    holding the mmap sem.
    Reviewed-by: default avatarGerald Schaefer <gerald.schaefer@linux.ibm.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Jérôme Glisse <jglisse@redhat.com>
    Cc: Jan Kara <jack@suse.cz>
    Cc: linux-mm@kvack.org
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: linux-samsung-soc@vger.kernel.org
    Cc: linux-media@vger.kernel.org
    Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
    Cc: linux-s390@vger.kernel.org
    Cc: Niklas Schnelle <schnelle@linux.ibm.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: default avatarNiklas Schnelle <schnelle@linux.ibm.com>
    Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    a67a88b0
pci_mmio.c 8.25 KB