• D
    mm: Close race in generic_access_phys · 96667f8a
    Daniel Vetter 提交于
    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 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 ioremap might need to manipulate pagetables too we need to drop
    the pt lock and have a retry loop if we raced.
    
    While at it, also add kerneldoc and improve the comment for the
    vma_ops->access function. It's for accessing, not for moving the
    memory from iomem to system memory, as the old comment seemed to
    suggest.
    
    References: 28b2ee20 ("access_process_vm device memory infrastructure")
    Signed-off-by: NDaniel 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: Benjamin Herrensmidt <benh@kernel.crashing.org>
    Cc: Dave Airlie <airlied@linux.ie>
    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: Dan Williams <dan.j.williams@intel.com>
    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: Chris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
    Link: https://patchwork.freedesktop.org/patch/msgid/20201127164131.2244124-8-daniel.vetter@ffwll.ch
    96667f8a
mm.h 99.1 KB