• Jan Kara's avatar
    mm: Preserve _PAGE_DEVMAP across mprotect() calls · 1b7ff520
    Jan Kara authored
    commit 4628a645 upstream.
    
    Currently _PAGE_DEVMAP bit is not preserved in mprotect(2) calls. As a
    result we will see warnings such as:
    
    BUG: Bad page map in process JobWrk0013  pte:800001803875ea25 pmd:7624381067
    addr:00007f0930720000 vm_flags:280000f9 anon_vma:          (null) mapping:ffff97f2384056f0 index:0
    file:457-000000fe00000030-00000009-000000ca-00000001_2001.fileblock fault:xfs_filemap_fault [xfs] mmap:xfs_file_mmap [xfs] readpage:          (null)
    CPU: 3 PID: 15848 Comm: JobWrk0013 Tainted: G        W          4.12.14-2.g7573215-default #1 SLE12-SP4 (unreleased)
    Hardware name: Intel Corporation S2600WFD/S2600WFD, BIOS SE5C620.86B.01.00.0833.051120182255 05/11/2018
    Call Trace:
     dump_stack+0x5a/0x75
     print_bad_pte+0x217/0x2c0
     ? enqueue_task_fair+0x76/0x9f0
     _vm_normal_page+0xe5/0x100
     zap_pte_range+0x148/0x740
     unmap_page_range+0x39a/0x4b0
     unmap_vmas+0x42/0x90
     unmap_region+0x99/0xf0
     ? vma_gap_callbacks_rotate+0x1a/0x20
     do_munmap+0x255/0x3a0
     vm_munmap+0x54/0x80
     SyS_munmap+0x1d/0x30
     do_syscall_64+0x74/0x150
     entry_SYSCALL_64_after_hwframe+0x3d/0xa2
    ...
    
    when mprotect(2) gets used on DAX mappings. Also there is a wide variety
    of other failures that can result from the missing _PAGE_DEVMAP flag
    when the area gets used by get_user_pages() later.
    
    Fix the problem by including _PAGE_DEVMAP in a set of flags that get
    preserved by mprotect(2).
    
    Fixes: 69660fd7 ("x86, mm: introduce _PAGE_DEVMAP")
    Fixes: ebd31197 ("powerpc/mm: Add devmap support for ppc64")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    1b7ff520
Name
Last commit
Last update
..
boot Loading commit data...
configs Loading commit data...
crypto Loading commit data...
entry Loading commit data...
events Loading commit data...
hyperv Loading commit data...
ia32 Loading commit data...
include Loading commit data...
kernel Loading commit data...
kvm Loading commit data...
lib Loading commit data...
math-emu Loading commit data...
mm Loading commit data...
net Loading commit data...
oprofile Loading commit data...
pci Loading commit data...
platform Loading commit data...
power Loading commit data...
purgatory Loading commit data...
ras Loading commit data...
realmode Loading commit data...
tools Loading commit data...
um Loading commit data...
video Loading commit data...
xen Loading commit data...
.gitignore Loading commit data...
Kbuild Loading commit data...
Kconfig Loading commit data...
Kconfig.cpu Loading commit data...
Kconfig.debug Loading commit data...
Makefile Loading commit data...
Makefile.um Loading commit data...
Makefile_32.cpu Loading commit data...