• Jan Kara's avatar
    mm/memory.c: fix modifying of page protection by insert_pfn() · 9aad9f3a
    Jan Kara authored
    [ Upstream commit cae85cb8 ]
    
    Aneesh has reported that PPC triggers the following warning when
    excercising DAX code:
    
      IP set_pte_at+0x3c/0x190
      LR insert_pfn+0x208/0x280
      Call Trace:
         insert_pfn+0x68/0x280
         dax_iomap_pte_fault.isra.7+0x734/0xa40
         __xfs_filemap_fault+0x280/0x2d0
         do_wp_page+0x48c/0xa40
         __handle_mm_fault+0x8d0/0x1fd0
         handle_mm_fault+0x140/0x250
         __do_page_fault+0x300/0xd60
         handle_page_fault+0x18
    
    Now that is WARN_ON in set_pte_at which is
    
            VM_WARN_ON(pte_hw_valid(*ptep) && !pte_protnone(*ptep));
    
    The problem is that on some architectures set_pte_at() cannot cope with
    a situation where there is already some (different) valid entry present.
    
    Use ptep_set_access_flags() instead to modify the pfn which is built to
    deal with modifying existing PTE.
    
    Link: http://lkml.kernel.org/r/20190311084537.16029-1-jack@suse.cz
    Fixes: b2770da6 "mm: add vm_insert_mix...
    9aad9f3a
memory.c 127 KB