• HATAYAMA Daisuke's avatar
    vmcore: support mmap() on /proc/vmcore · 83086978
    HATAYAMA Daisuke authored
    This patch introduces mmap_vmcore().
    
    Don't permit writable nor executable mapping even with mprotect()
    because this mmap() is aimed at reading crash dump memory.  Non-writable
    mapping is also requirement of remap_pfn_range() when mapping linear
    pages on non-consecutive physical pages; see is_cow_mapping().
    
    Set VM_MIXEDMAP flag to remap memory by remap_pfn_range and by
    remap_vmalloc_range_pertial at the same time for a single vma.
    do_munmap() can correctly clean partially remapped vma with two
    functions in abnormal case.  See zap_pte_range(), vm_normal_page() and
    their comments for details.
    
    On x86-32 PAE kernels, mmap() supports at most 16TB memory only.  This
    limitation comes from the fact that the third argument of
    remap_pfn_range(), pfn, is of 32-bit length on x86-32: unsigned long.
    
    [akpm@linux-foundation.org: use min(), switch to conventional error-unwinding approach]
    Signed-off-by: default avatarHATAYAMA Daisuke <d.hatayama@jp.fujitsu.com>
    Acked-by: default avatarVivek Goyal <vgoyal@redhat.com>
    Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: Atsushi Kumagai <kumagai-atsushi@mxc.nes.nec.co.jp>
    Cc: Lisa Mitchell <lisa.mitchell@hp.com>
    Cc: Zhang Yanfei <zhangyanfei@cn.fujitsu.com>
    Tested-by: default avatarMaxim Uvarov <muvarov@gmail.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    83086978
vmcore.c 24.6 KB